我浏览了很多网站,这些网站解释了 java 中的访问说明符,例如 java 论文、 java 的访问说明符 以及 此处 的许多其他 stackoverflow 问题。
所有这些人都解释说受保护的成员可以被任何子类访问(也可以被包外的子类访问)并且可以被包级别的类访问。
在对受保护成员进行试验时,我发现我无法从包外的子类访问受保护成员。
检查下面的代码。具有受保护成员的公共类:
package com.One;
public class ProVars {
protected int i = 900;
protected void foo()
{
System.out.println("foo");
}
}
不同包中的另一个公共类试图访问受保护的成员:
package com.Two;
import com.One.ProVars;
public class AnotherClass extends ProVars {
public static void main(String[] args) {
ProVars p = new ProVars();
System.out.println(p.i);//the field ProVars.i is not visible(Compilation Error)
p.foo();//the method foo() from the type ProVars is not visible
}
}
任何解释表示赞赏。
原文由 chaitanya89 发布,翻译遵循 CC BY-SA 4.0 许可协议
您正试图像使用它们一样使用它们
public
。它们不是public
,它们是protected
。例子
子类使用
protected
方法或变量的正确用法是:为什么这行得通?
因为你有
inherited
类。这意味着您已经获得了它的所有方法和变量。现在,因为您的方法和变量是protected
,这也意味着可以从subclass
访问它。尝试将它们声明为private
看看会发生什么。