我在 Java 中有以下代码:
package a;
public classs ClassInOtherPackage{
protected void protectedMethod(){}
protected class protectedInnerClass {}
}
package b;
import a.*;
public class MyClass extends ClassInOtherPackage{
public MyClass(){
MyClass x = new MyClass();
x.protectedMethod(); //<-- This one ok
//UPDATED: Declaration is ok
MyClass.protectedInnerClass y; //<-- This one ok
//UPDATED: Only when instantiated is not allowed, why?
y = x.new protectedInnerClass(); //<-- Not allow when instantiated.
}
}
请参阅 Java 文档:
为什么我不能如上所示实例化内部 protected 类?
最佳答案
在 JLS 8.8.9
所以隐式声明的构造函数是:
protected class protectedInnerClass {
protected protectedInnerClass(){
super();
}
}
您的代码无法编译,因为构造函数不可访问。关于java - protected 内部类不能从另一个包的子类访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17610498/