测试.java
package a;
import b.B;
public class Test {
public static void main(String[] v) {
new A().test();
new B().test();
}
}
A.java:
package a;
public class A {
protected void test() { }
}
B.java:
package b;
public class B extends a.A {
protected void test() { }
}
为什么 new B().test()
会报错?这不会违反可见性规则吗?
B.test()
在 Test
中是不可见的,因为它们在不同的包中,但它拒绝调用 test()
在可见的 B
的父类(super class)中。
JLS 适当部分的链接将不胜感激。
最佳答案
这里是 protected
关键字上的 JLS:
JLS protected description和 JLS protected example .
基本上,protected
修饰符意味着您可以访问字段/方法/... 1) 在给定类的子类中 和 2) 从同一类中的类包裹。
因为 2) new A().test()
有效。但是 new B().test()
不起作用,因为 B
类在不同的包中。
关于java - 覆盖 Java 中的 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637650/