【问题标题】:Why can protected attributes be accessed by other classes of the same package [duplicate]为什么同一包的其他类可以访问受保护的属性[重复]
【发布时间】:2015-03-05 19:07:50
【问题描述】:

为什么同一个包的其他类可以访问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();
    }
}

【问题讨论】:

  • 您要问的是为什么他们有private 可见性修饰符。 protected 用于同一包中的类。
  • @DrewKennedy No. 默认可见性(即没有 private、没有 public、没有 protected)是包私有的。 protected 表示(AFAIK)只有子类可以访问它。它不是包私有的。
  • @newbiedoodle 受保护并不意味着只有子类可以访问它。
  • @peter.petrov 是的,刚刚查了一下。只是包外的任何类都拿不到。
  • @DrewKennedy 它们也可用于您定义的类的任何子类。

标签: java visibility keyword protected


【解决方案1】:

你应该这样想:protected 是一种 public 访问级别。受保护的成员是为扩展而设计的类中公共 API 的一部分。 API 客户端可访问的成员无法访问 API 实现是没有意义的,尤其是在另一个具有默认访问级别(非公共)的成员可访问的地方。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2013-02-03
    • 2011-04-22
    • 1970-01-01
    • 2019-10-06
    • 2014-11-06
    • 1970-01-01
    • 2015-11-23
    • 2011-03-11
    • 2023-04-09
    相关资源
    最近更新 更多