【发布时间】:2018-10-30 05:33:14
【问题描述】:
package pack1;
class A{
protected void m1(){
System.out.println("protected modifier");
}
}
package pack2;
class B extends A{
public static void main(string[]args){
B b = new B();//Valid
b.m1();
A a = new B();//Invalid
a.m2();
A a1 = new A();//InValid
a1.m1();
}
}
为什么在访问包外的受保护成员时,我们只需要子类引用。?
为什么我们不能使用父引用来访问受保护的成员(这里 A a = new B())?
我浏览了博客和许多堆栈溢出的答案,但没有找到 WHY? 的任何答案。
那么任何人都可以帮助我知道为什么的答案吗?
【问题讨论】:
-
您不能访问
A,因为您仍然在子类或包之外。main方法是static,因此未绑定B类的实例。为了访问A,您需要在B类中,所以在非静态上下文中。 -
@Zabuza 你能详细说明你的答案吗?对我来说还不清楚
标签: java protected access-modifiers