从超类(JAVA)访问私有变量

Ner*_*and 8 java inheritance

好的,所以我学习了java所有学期,并认为我对继承和超级/子类有一个清晰的认识.今天我们被赋予了作为一个叫做敌人的超类的任务,包括不同类型的敌人的子类.我做的一切都很好,我的所有子类都正常工作,但当我回去阅读我们必须遵循的指南时,我发现了这句话:

"超类的所有成员变量必须是私有的.对变量的任何访问都必须通过子类中的受保护方法来完成."

据我所知,这对我来说毫无意义.如果变量在超类中是私有的,那么即使从子类中也不允许访问?讨论子类中受保护方法的最后一部分对我来说也没有任何意义.这对超类有什么帮助和/或允许任何访问?

从我对继承的了解,以下是我的想法:

                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
Run Code Online (Sandbox Code Playgroud)

如果我在这里理解错误,请解释一下!如果我不正确地理解它,我不想让教练面对给我们错误的指示!

Cyr*_* Ka 17

那个部分

Any access to an a variable must be done through protected methods in the sub classes.
Run Code Online (Sandbox Code Playgroud)

...只是意味着子类必须调用超类中定义的受保护方法.由于这些方法受到保护,因此子类可以访问它们.

首先,您将定义一个这样的基类:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你会在你的子类中使用它,如下所示:

class Child extends Base{

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