Java child class 中的静态构造函数访问
Java static constructor access in child class
我有两个类
package a;
public class A {
protected void doSomething() {
}
protected static class C {
protected C(int c) {
}
}
}
package b;
public class B extends A {
@Override
protected void doSomething() {
C c = new C(0); //compile error
C c2 = new C(0){}; //legal
}
}
我已阅读第 6.6.2.2 章。访问受保护的 JLS 构造函数 (https://docs.oracle.com/javase/specs/jls/se11/html/jls-6.html),但我仍然对解释感到困惑。即使 B 是 A 的 child,超级构造函数 new C(0);
的调用有什么问题?
谢谢 :-)
在超类class中声明为受保护的变量、方法和构造函数只能由其他包中的子class或包中的任何class访问受保护成员的 class.
现在,C
class 的构造函数受到保护,因此只能由 C
的子 classes 在 a
包外部访问。但是 B
不是 C
的子 class ...
正如@Amongalen 所指出的,第二个陈述
C c2 = new C(0){};
是合法的,因为它创建了一个扩展 C
的匿名 class,因此受保护的构造函数在这里可见。
我有两个类
package a;
public class A {
protected void doSomething() {
}
protected static class C {
protected C(int c) {
}
}
}
package b;
public class B extends A {
@Override
protected void doSomething() {
C c = new C(0); //compile error
C c2 = new C(0){}; //legal
}
}
我已阅读第 6.6.2.2 章。访问受保护的 JLS 构造函数 (https://docs.oracle.com/javase/specs/jls/se11/html/jls-6.html),但我仍然对解释感到困惑。即使 B 是 A 的 child,超级构造函数 new C(0);
的调用有什么问题?
谢谢 :-)
在超类class中声明为受保护的变量、方法和构造函数只能由其他包中的子class或包中的任何class访问受保护成员的 class.
现在,C
class 的构造函数受到保护,因此只能由 C
的子 classes 在 a
包外部访问。但是 B
不是 C
的子 class ...
正如@Amongalen 所指出的,第二个陈述
C c2 = new C(0){};
是合法的,因为它创建了一个扩展 C
的匿名 class,因此受保护的构造函数在这里可见。