原文:“嵌套类与普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。”
这里指的普通类的字段与方法只能放在类的外部层次是什么意思,内部类有自己的方法字段阿,这里没明白,所以后边那句不可以有static的东西也不明白。请各路大虾指点啊。

解决方案 »

  1.   

    嵌套类是被声明为静态(static)的内部类,
    它可以不依赖于外部类实例被实例化。内部类需要在外部类实例化后才能实例化。
      

  2.   

    先谢谢回复,我想问的不是嵌套类和内部类的区别,而是"普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段"这里不理解
      

  3.   

    子类肯定没有STATIC了,只要父类才有的,就是外部类。
      

  4.   

    Static filed的本意是不需要创建任何类型实例的情况下就可以访问,但如果在非静态内部类里面包含Static field,为了访问这个Static filed,需要先创建外围类的实例,这违背了Static field的本意。
      

  5.   

    Chinajash() ( ) 信誉:100    Blog  2006-11-28 15:28:32  得分: 0  
     
     
       Static filed的本意是不需要创建任何类型实例的情况下就可以访问,但如果在非静态内部类里面包含Static field,为了访问这个Static filed,需要先创建外围类的实例,这违背了Static field的本意。
      
    如果说违背了Static field的本意的话,直接用类名去访问不用对象不可以吗,就像普通类那样。Outer.Inner.staticField
      

  6.   

    To donaroo,如果Inner是非静态的内部类,就不能通过下面的方式去访问他的静态field
    Outer.Inner.staticField
    因为首先是不能通过Outer.Inner去获得Inner的引用的,这就好比不能用类去访问其内部的非静态属性一样.只能用Outer的对象实例去访问Inner
      

  7.   

    To Chinajash() 我知道Outer.Inner.staticField这样做语法上是通不过的 只是
    Outer.staticField1,可以这样访问,不需要实例化Outer,那同样Outer.Inner.staticField也都不需要实例化Outer和Inner,毕竟staticfield在程序中是唯一的,即便也许会有很多个Inner的实例。
    已经完全脱离语法了,只是在想java为什么不这样设计有些乱,是不是从逻辑上讲,在Outer实例化之前,Outer的非静态的东西还都不存在,这么理解??
      

  8.   

    To donaroo
    你说的也许有道理, 我也不知道SUN为什么要这样设计这个语言的细节:(
    "在Outer实例化之前,Outer的非静态的东西还都不存在,这么理解??",我觉得可以这么理解
      

  9.   

    普通内部类是不可以有非静态成员,这确实是设计的问题
    SUN当初这样设计就是为了顺从静态的意思
    如果内部类有静态成员的话,就违背了引用静态成员还要实例化类的这一初衷
    To donaroo我知道Outer.Inner.staticField这样做语法上是通不过的 只是
    Outer.staticField1,可以这样访问,不需要实例化Outer,那同样Outer.Inner.staticField也都不需要实例化Outer和Inner,毕竟staticfield在程序中是唯一的,即便也许会有很多个Inner的实例。
    已经完全脱离语法了,只是在想java为什么不这样设计因为Inner不是静态成员,它虽然也一个类,但是它对于Outer类来说,它只是一个普通的成员而已,既然是一个成员,那么就不可能用类名直接来引用,而要通过对象来引用
      

  10.   

    To lbfhappy(千里冰封) 因为Inner不是静态成员,它虽然也一个类,但是它对于Outer类来说,它只是一个普通的成员而已,既然是一个成员,那么就不可能用类名直接来引用,而要通过对象来引用
    Inner可不可以看做类型,Outer.Inner testInner; 可以这样定义一个引用,为什么不可以直接使用Outer.Inner这个类型的静态变量呢
      

  11.   

    就因为这样,所以对Java语法彻底失望,不如C#简明。
    Outer.Inner testInner;只能视为特例看待了,总不能这样子引用内部类吧:outerInstance.Inner? //没试过,Java总会有千奇百怪的语法,说不定也行