class ClassA
{
private ClassA()
{
}
}
class ClassB extends ClassA
{
//here we will get a compiler error that cannot extend a class with private constructor
}
public class GenericTestClass
{
private class TestingInnerPrivateClass
{
private TestingInnerPrivateClass()
{
}
public void display()
{
System.out.print("Test");
};
}
public class InnerPublicClass extends TestingInnerPrivateClass
{
//here i am able to extend a private class
}
public static void main(String[] args)
{
GenericTestClass genericTestClass = new GenericTestClass();
GenericTestClass.InnerPublicClass innerPublicClassInstance = genericTestClass.new InnerPublicClass();
innerPublicClassInstance.display();
}
}
如果您查看上面的代码,就会发现我无法从classB
扩展classA
,但我可以从InnerPublicClass
扩展InnerPrivateClass
我无法理解私有类和私有构造函数的类如何在内部类中被子类化。
答案 0 :(得分:6)
InnerPublicClass
在GenericTestClass
中定义,因此可以访问此类的所有私有成员,其中包括内部类TestingInnerPrivateClass
。因此,它可以扩展TestingInnerPrivateClass
。
以下是JLS 6.6.1的相关引用:
如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。