我尝试了下面的代码,并据此了解到内部类是继承给OuterClass的子类的,对吗?
class Outter{
int i=1;
class Inner{
int i=2;
public void hello(){
System.out.println("hello from outter.inner");
}
}
}
class ChildClass extends Outter{
class ChildInner{
}
}
public class Classes {
public static void main(String[] args) {
Inner inner = (new ChildClass()).new Inner();
System.out.println(inner.i);
inner.hello();
}
}
例外的输出:
2
outter.inner的你好
Inner inner = (new ChildClass()).new Inner();
这行代码正常工作时,应意味着将内部类继承到ChildClass
由于在Link
上发现以下内容,我感到困惑当外部类被其子类扩展时,成员内部类将不会继承到子类。要在外部类的子类内部使用内部类属性,子类还必须具有一个内部类,并且该内部类必须扩展外部类的内部类。
答案 0 :(得分:4)
因此,我将通过一个示例来说明该语句:
当外部类被其子类扩展时,成员内部 类不会继承到子类。使用内部类 外部类的子类内部的属性,子类还必须 有一个内部类,并且内部类必须扩展 外层阶级。
class Outter {
void method(){
Inner test=new Inner();
test.i=5; //No problem to do that even if i is private because it is inner class
}
class Inner {
private int i = 2;
}
}
class ChildClass extends Outter{
void method2(){
Inner test=new Inner();
test.i=5; //Does not compile
}
}
您不能在子类中访问“ i”。而且,如果您还在其中扩展内部,则可以:
class ChildClass extends Outter{
void method2(){
Inner2 test=new Inner2();
test.i=5; //Compiles fine because we have also extended the inner class (like written in the quoted text)
}
class Inner2 extends Inner{ }
}
答案 1 :(得分:0)
声明:
Inner inner = (new ChildClass()).new Inner();
不是真正继承到ChildClass
如果您将其破坏,基本上就是这样:
ChildClass child = new ChildClass();
Inner inner = child.new Inner();
现在您可以在new Inner()
上调用ChildClass
,因为它扩展了Outter
这并不意味着ChildClass
可以调用Inner
内部的任何方法/属性,只是因为Inner
是Outter
的一部分