请看下面两个类定义:public class Outer {    class Inner1 extends Outer {}    class Inner2 extends Inner1 {}}
 
==================================================================================================
 
public class Outer {    class Inner1 {}    class Inner2 extends Inner1 {}}先不编译,猜猜看哪个类能编译通过,哪个编译失败?
请编译验证你的预测,并想想看为什么会是这样。

解决方案 »

  1.   

    1中的定义可能导致循环
    Def outer{
        Def inner(inner extends outer so find outer {
            Def outer {
                {....}
            }
        })
    }
    内部类不需要继承外部类的,如果继承的话感觉会造成循环查找和定义,这样就没完没了了...
      

  2.   

    还没编译,说说我的理解,Outer类还有它的成员对于Inner1或者Inner2来说都未知的,应该说外部类如何定义,有哪些变量,内部类是不知的(印象中 学内部类的时候书上有说过)。。所以第一个会编译不过
      

  3.   


    没人会在项目中这么设计类。这道题的目的不是告诉人要这么设计类,而是检验对java内部类的理解程度。
    所以请不要总以项目经验的角度考虑问题。
      

  4.   

    感觉ls各位没有说到点子上,大家都在说内部类不需要或不应该继承外部类,事实上,下面这个代码是可以运行的:
    public class Outer {
    class Inner1 extends Outer {}
    }
    我试了一下,在Inner1里面写上方法,完全可以使用。
    只是再加个内部类Inner2 去继承 Inner1 时,无法编译。我还在想原因
      

  5.   

    public class Outer {

    static class Inner1 extends Outer {} class Inner2 extends Inner1 {}
    class InnOut{}
    class InnInn extends InnOut{}
    public static void main(String[] args) {
    Outer o = new Outer();
    Inner2 i2 = o.new Inner2();
    InnInn ii = o.new InnInn();
    }
    }
    这样是可以的..........
      

  6.   

    public class Outer {class Inner1 extends Outer {}class Inner2 extends Inner1 {}}==========
    构造器无限递归
      

  7.   


    你说这是构造器无限递归,编译无法通过。那么好,你看下面这个:
    public class Outer {class Inner1 extends Outer {}class Inner2 extends Inner1 {
       public Inner2(){
           Outer.this.super();
       }
    }}
    这个就是显式给出Inner2 的无参构造器而已,也是你说的“构造器无限递归”,那你怎么解释这个类可以编译通过呢?
      

  8.   

    第一个编译不通过是因为java不可以多重继承  
    第二个可以编译通过