gpt4 book ai didi

子类中的 Java 静态构造函数访问

转载 作者:行者123 更新时间:2023-12-01 14:07:14 26 4
gpt4 key购买 nike

我有两个类(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 章。访问 protected JLS 构造函数(https://docs.oracle.com/javase/specs/jls/se11/html/jls-6.html),但我仍然对解释感到困惑。即使 B 是 A 的子级,调用 super 构造函数 new C(0); 有什么问题?

谢谢 :-)

最佳答案

在父类(super class)中声明为 protected 变量、方法和构造函数只能由其他包中的子类或 protected 成员类的包中的任何类访问。

现在,C 类的构造函数受到保护,因此只能由 C 的子类在 a 包之外访问。但是 B 不是 C 的子类 ...

正如@Amongalen 所指出的,第二个陈述

C c2 = new C(0){};

是合法的,因为它创建了一个扩展 C 的匿名类,因此 protected 构造函数在这里可见。

关于子类中的 Java 静态构造函数访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62752613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com