我有 3 个 A、B、C 类:
package com.training.protectedclass.A;
public class A
{
protected int value;
}
package com.training.protectedclass.B;
import com.training.protectedclass.A.A;
public class B extends A
{
public void test()
{
this.value = 10;
A a = new A();
a.value = 12; //Error => The field A.value is not visible
}
}
package com.training.protectedclass.C;
import com.training.protectedclass.B.B;
import com.training.protectedclass.A.A;
public class C extends A
{
public void test()
{
B b = new B();
b.value = 45; //Error => The field A.value is not visible
}
}
当继承类与基类存在于不同的包中时,它无法访问基类的受保护成员。但是,当所有三个类都存在于同一个包中时,上述错误就会消失,并且代码编译时不会出现错误。
谁能向我解释上面代码中启动的每个错误的原因?
谢谢 :)
这是因为protected
在 Java 中意味着两件事:1)继承类可以看到它们继承的受保护成员,2)同一包中的其他类可以看到受保护成员(即使它们不继承该成员)。
所以在课堂上B
你继承了value
因此您可以通过以下方式访问它this.value
,但作为类A
在另一个你看不到的包中a.value
。这是因为当你打电话时a.value
您正在访问另一个包中的类的成员,而不是该字段的继承版本value
.
在上课的情况下C
,您无法访问任何受保护的成员B
因为你既不继承自B
也不在同一个包中B
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)