好的,所以我整个学期都在学习 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/