【发布时间】:2011-08-04 00:07:03
【问题描述】:
Test.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 中是不可见的,因为它们位于不同的包中,但它拒绝调用可见的B 超类中的test()。
如果能提供 JLS 相应部分的链接,我们将不胜感激。
【问题讨论】:
-
“给出错误” .. 你能说得更具体点吗?
-
@Kevin 他在问为什么他不能调用他可以访问超级方法的方法。
-
@Jeremy:它拒绝编译:“a/Test.java:10: test() has protected access in b.B”
-
@Kevin:阅读问题:“这不违反可见性规则吗?”
-
@Jeremy 错误(在这种情况下)相当明显:这是一个编译时错误,说
B().test()对a.Test.main(String[])不可见。
标签: java methods overriding protected