【发布时间】:2019-09-16 10:31:17
【问题描述】:
我在包bbb中有类c1:
package bbb;
public class c1 {
protected static int a = 5;
}
我必须导入 c1 的类:
package aaa;
import bbb.c1;
public class c2 extends c1 {
public c2() {
a = 10;
c1 c = new c1();
c.a = 60;
}
}
package aaa;
import bbb.c1;
public class c4 {
public c4() {
c1 c = new c1();
c.a = 60;
}
}
c2 和 c4 都使用 c1。 c2 派生自 c1 而 c4 - 不是。我对这两个类中的变量c 感兴趣。在c4 类的情况下,我有编译错误"a has protected access in bbb.c1" 而在c2 情况下c 变量工作正常。
我预计派生类可能会使用内部字段a,但不应允许在新创建的c 变量中使用它,就像它在c4 案例中所做的那样,因为事实上它不是通过派生访问字段。逻辑在哪里?
更新
Book Mala Gupta "OCA Java SE 8 Programmer I Certification Guide" 的引用告诉派生类对象只能通过继承而不是引用来访问受保护的方法:
默认访问可以与包私有(可访问 仅在一个包内),并且受保护的访问可以与包相比 private + kids(“kids”指派生类)。孩子们可以访问受保护的 方法只能通过继承而不是通过引用(通过 在对象上使用点运算符)
是不是搞错了?
【问题讨论】:
标签: java