我在 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/

10-10 15:52