我经历了这么多的网站这解释了有关使用Java访问说明如走的java文件,Java的访问说明,像许多其他计算器的问题在这里.
所有这些人解释说,受保护的成员可以被任何子类(也可以是包外的子类)访问,并且可以由包级别类访问.
在试验受保护的成员时,我发现我无法从包外的子类访问受保护的成员.
检查下面的代码.受保护成员的公共类:
package com.One;
public class ProVars {
protected int i = 900;
protected void foo()
{
System.out.println("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
尝试访问受保护成员的不同包中的另一个公共类:
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
}
}
Run Code Online (Sandbox Code Playgroud)
任何解释都表示赞赏.
chr*_*her 10
你试图像使用它们一样使用它们public.他们不是public,他们是protected.
例
ProVars p = new ProVars();
p.foo(); // This will throw an error because foo() is not public.
Run Code Online (Sandbox Code Playgroud)
对于子类使用protected方法或变量的正确用法是:
public class MyClass extends ProVars
{
public MyClass()
{
System.out.println(i); // I can access it like this.
foo(); // And this.
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这样做?
因为你inherited是班上的人.这意味着你已经拥有了它的所有方法和它的变量.现在,因为你的方法和变量是protected,它也意味着可以从中访问它subclass.尝试并声明它们private,看看会发生什么.
即使在派生类中,您也只能从至少属于您自己类型的限定符访问受保护字段.
在里面AnotherClass,你可以访问new AnotherClass().i,但不是new ProVars().i.