请看下面两个类定义:public class Outer { class Inner1 extends Outer {} class Inner2 extends Inner1 {}}
==================================================================================================
public class Outer { class Inner1 {} class Inner2 extends Inner1 {}}先不编译,猜猜看哪个类能编译通过,哪个编译失败?
请编译验证你的预测,并想想看为什么会是这样。
==================================================================================================
public class Outer { class Inner1 {} class Inner2 extends Inner1 {}}先不编译,猜猜看哪个类能编译通过,哪个编译失败?
请编译验证你的预测,并想想看为什么会是这样。
Def outer{
Def inner(inner extends outer so find outer {
Def outer {
{....}
}
})
}
内部类不需要继承外部类的,如果继承的话感觉会造成循环查找和定义,这样就没完没了了...
没人会在项目中这么设计类。这道题的目的不是告诉人要这么设计类,而是检验对java内部类的理解程度。
所以请不要总以项目经验的角度考虑问题。
public class Outer {
class Inner1 extends Outer {}
}
我试了一下,在Inner1里面写上方法,完全可以使用。
只是再加个内部类Inner2 去继承 Inner1 时,无法编译。我还在想原因
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();
}
}
这样是可以的..........
构造器无限递归
你说这是构造器无限递归,编译无法通过。那么好,你看下面这个:
public class Outer {class Inner1 extends Outer {}class Inner2 extends Inner1 {
public Inner2(){
Outer.this.super();
}
}}
这个就是显式给出Inner2 的无参构造器而已,也是你说的“构造器无限递归”,那你怎么解释这个类可以编译通过呢?
第二个可以编译通过