为什么受保护的属性可以被同一个包的其他类访问

时间:2015-01-07 19:24:17

标签: java visibility keyword protected

为什么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();
    }
}

2 个答案:

答案 0 :(得分:1)

因为这是语言创作者的决定。

可以访问带有受保护访问修饰符的方法/字段 来自同一个包的两个类与定义它们的类相同,
以及定义它们的类的子类。当然,
它们也可以通过定义类本身访问。

答案 1 :(得分:1)

您应该这样考虑:protected是一种公共访问级别。受保护的成员是为扩展而设计的类中的公共API的一部分。 API客户端可访问的成员无法访问API实现是没有意义的,尤其是在可以访问具有默认访问级别(非公开)的其他成员的位置。