【问题标题】:Protected class in java [duplicate]java中的受保护类[重复]
【发布时间】:2021-02-16 01:20:25
【问题描述】:

这是场景:

包 1 有 Public class Machine,其中有一个受保护的变量 protected int speed=3;

我还有一个包裹, 包 2,它有 Public class Car,它是 Machine 类的子类,我们还有一个 Public class Apple,它有 main 方法。

我的问题是: 为什么可以从 Car 类方法/构造函数中访问速度,但不能从 Appple 类中存在的 main 方法创建的 Car 类的实例中访问速度。

我是java新手,请帮忙...

【问题讨论】:

    标签: java package protected


    【解决方案1】:

    该类的受保护成员仅可由该类的派生类访问,而与该类从何处启动无关。

    您可以将 public/protected/private 成员视为不仅提供所需的封装,而且还规定了它们可以访问的层次结构级别。

    公共成员可以被所有人访问

    protected-members 可以被它自己和它的孩子访问

    private-members 只能自己访问

    【讨论】:

      【解决方案2】:

      为了回答您的问题,

      为什么可以从 Car 类方法/构造函数中获得速度?

      这是因为 speed 被标记为受保护,并且根据定义,protected 成员可用于类及其子类主体,但不能从外部获得 的。由于 Car 是 Machine 的子类,因此可以从 car 中访问速度。

      但不是来自 Appple 类中的 main 方法创建的 Car 类的实例

      在这里,您试图从类/子类主体外部访问速度作为公共变量,因此无法访问。

      请查看section 6.6.2 of the JLS了解更多信息。

      【讨论】:

      • 谢谢,但我们可以从一个实例访问受保护的变量,例如...... ClassB Obj=new ClassB();对象.k=3; ///在这里,我正在从类/子类主体外部访问 int k 作为公共变量。
      • 这里所有的类都在同一个包中......并且int k是ClassB的父类的受保护变量。
      • 你不能那样做。从类外部访问“k”的唯一方法是为其提供公共 setter 方法。
      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 2011-09-22
      • 2018-05-16
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2023-03-25
      • 2018-09-29
      相关资源
      最近更新 更多