原文:“嵌套类与普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。”
这里指的普通类的字段与方法只能放在类的外部层次是什么意思,内部类有自己的方法字段阿,这里没明白,所以后边那句不可以有static的东西也不明白。请各路大虾指点啊。
这里指的普通类的字段与方法只能放在类的外部层次是什么意思,内部类有自己的方法字段阿,这里没明白,所以后边那句不可以有static的东西也不明白。请各路大虾指点啊。
它可以不依赖于外部类实例被实例化。内部类需要在外部类实例化后才能实例化。
Static filed的本意是不需要创建任何类型实例的情况下就可以访问,但如果在非静态内部类里面包含Static field,为了访问这个Static filed,需要先创建外围类的实例,这违背了Static field的本意。
如果说违背了Static field的本意的话,直接用类名去访问不用对象不可以吗,就像普通类那样。Outer.Inner.staticField
Outer.Inner.staticField
因为首先是不能通过Outer.Inner去获得Inner的引用的,这就好比不能用类去访问其内部的非静态属性一样.只能用Outer的对象实例去访问Inner
Outer.staticField1,可以这样访问,不需要实例化Outer,那同样Outer.Inner.staticField也都不需要实例化Outer和Inner,毕竟staticfield在程序中是唯一的,即便也许会有很多个Inner的实例。
已经完全脱离语法了,只是在想java为什么不这样设计有些乱,是不是从逻辑上讲,在Outer实例化之前,Outer的非静态的东西还都不存在,这么理解??
你说的也许有道理, 我也不知道SUN为什么要这样设计这个语言的细节:(
"在Outer实例化之前,Outer的非静态的东西还都不存在,这么理解??",我觉得可以这么理解
SUN当初这样设计就是为了顺从静态的意思
如果内部类有静态成员的话,就违背了引用静态成员还要实例化类的这一初衷
To donaroo我知道Outer.Inner.staticField这样做语法上是通不过的 只是
Outer.staticField1,可以这样访问,不需要实例化Outer,那同样Outer.Inner.staticField也都不需要实例化Outer和Inner,毕竟staticfield在程序中是唯一的,即便也许会有很多个Inner的实例。
已经完全脱离语法了,只是在想java为什么不这样设计因为Inner不是静态成员,它虽然也一个类,但是它对于Outer类来说,它只是一个普通的成员而已,既然是一个成员,那么就不可能用类名直接来引用,而要通过对象来引用
Inner可不可以看做类型,Outer.Inner testInner; 可以这样定义一个引用,为什么不可以直接使用Outer.Inner这个类型的静态变量呢
Outer.Inner testInner;只能视为特例看待了,总不能这样子引用内部类吧:outerInstance.Inner? //没试过,Java总会有千奇百怪的语法,说不定也行