java - 从父类(super class)访问私有(private)变量 (JAVA)

标签 java inheritance

好的,所以我整个学期都在学习 Java,并且认为我对继承和父类(super class)/子类有清楚的了解。今天我们的任务是创建一个名为 enemy 的父类(super class),其中包含不同类型敌人的子类。我做的一切都很好,我所有的子类都在工作,但是当我回去阅读我们必须遵循的指南时,我发现了这句话:

"All member variables of the super class must be private. Any access to a variable must be done through protected methods in the subclasses."

据我了解,这对我来说毫无意义。如果一个变量在父类(super class)中是私有(private)的,那么即使从子类也不能访问吗?讨论子类中 protected 方法的最后一部分对我来说也没有任何意义。这如何帮助和/或允许对父类(super class)进行任何访问?

根据我对继承的了解,以下是我认为正确的内容:

                Access Levels
 Modifier    Class  Package Subclass    World
 public        Y      Y        Y        Y
 protected     Y      Y        Y        N
 no modifier   Y      Y        N        N
 private       Y      N        N        N

如果我在这里理解有误,请解释!如果是我没有正确理解,我不想因为给我们错误的指示而与教练对质!

最佳答案

部分

Any access to an a variable must be done through protected methods in the sub classes.

... 只是意味着子类必须调用父类(super class)中定义的 protected 方法。由于这些方法受到保护,它们可以被子类访问。

首先你会像这样定义一个基类:

public class Base {

    private int x;  // field is private

    protected int getX() {  // define getter
        return x;
    }

    protected void setX(int x) {  // define setter
        this.x = x;
    }
}

然后你会像这样在你的子类中使用它:

class Child extends Base{

    void foo() {
        int x = getX(); // we can access the method since it is protected.
        setX(42);  // this works too.
    }
}

关于java - 从父类(super class)访问私有(private)变量 (JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843021/

相关文章:

c++ - 有没有办法用 nlohmann_json 库序列化异构 vector ?

java - 在 fragment 中设置布局管理器时,在 Recyclerview 上出现空指针异常

java - 表模型监听器

java - 用@Override注解继承的方法是不是必须的?

iPhone - 当 [super init] 失败时使用 self = [super init]

java - Eclipse 与 Jenkins 中的 TestNG 继承行为

java - java中如何对数组列表进行排序

java - Selenium 一次性填写所有输入字段 Java

java - 当一对多关系的火合并时,Hibernate 抛出 EntityNotFoundException

java - 如何使用子类对象访问隐藏的父类(super class)成员