为什么Java类中的受保护属性可以被同一个包的其他类访问?
我认为只能通过继承来访问。
A.java
package abc;
class A {
protected int attr1;
}
B.java
package abc;
class B {
B() {
A obj = new A();
obj.attr1 = 2;
}
public static void main(String[] args) {
B obj2 = new B();
}
}
答案 0 :(得分:1)
因为这是语言创作者的决定。
可以访问带有受保护访问修饰符的方法/字段
来自同一个包的两个类与定义它们的类相同,
以及定义它们的类的子类。当然,
它们也可以通过定义类本身访问。
答案 1 :(得分:1)
您应该这样考虑:protected
是一种公共访问级别。受保护的成员是为扩展而设计的类中的公共API的一部分。 API客户端可访问的成员无法访问API实现是没有意义的,尤其是在可以访问具有默认访问级别(非公开)的其他成员的位置。