【发布时间】:2016-01-13 15:10:32
【问题描述】:
错误:m1() has protected access in A
当我尝试使用超类引用变量 (A obj=new B())
这是包 pkg1 中的第一个类;
package pkg1;
public class A {
protected void m1() {
System.out.println("protected method");
}
}
这是第二个类,它在另一个包 pkg2 中导入 pkg1;
package pkg2;
import pkg1.A;
public class B extends A {
@Override
protected void m1() {
System.out.println("override m1");
}
public static void main(String ar[]) {
A obj=new B();
obj.m1();
}
}
【问题讨论】:
-
您正在尝试访问
obj.m1(),而obj的类型为A。所以... -
确实如此。请解释为什么您期望它会起作用。 (而且以后请多注意代码格式,我现在已经修好了,但之前是一团糟。)
-
@denys Seguret ,@ jon Skeet 如果我没有穿g java 提供了动态方法分派的机制,所以我认为我可以访问 m1() 方法,该方法通过使用引用从 A 覆盖A 类型的变量。
标签: java