内部类是否继承到OuterClass的子类?

时间:2018-08-02 14:04:25

标签: java

我尝试了下面的代码,并据此了解到内部类是继承给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

上发现以下内容,我感到困惑
  

当外部类被其子类扩展时,成员内部类将不会继承到子类。要在外部类的子类内部使用内部类属性,子类还必须具有一个内部类,并且该内部类必须扩展外部类的内部类。

2 个答案:

答案 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内部的任何方法/属性,只是因为InnerOutter的一部分