假设:
public class Counter {
private int count;
public Counter() {
count = 5;
}
public void increment() {
count++;
}
public void reset() {
count = 0;
}
public int value() {
return count;
}
}
如果我有一个具有已定义函数的子类(未隐式创建),子类构造函数是否从超类构造函数继承实例变量count
?我问这个是因为我对private count
感到有些困惑。
public class ModNCounter extends Counter {
int modCount;
public ModNCounter(int n) {
modCount = n;
}
@Override
public int value() {
return super.value() % modCount;
}
public static void main(String[] args) {
ModNCounter modCounter = new ModNCounter(3);
System.out.println(modCounter.value()); //prints out 5 % 3 = 2
modCounter.increment(); // count = 6
System.out.println(modCounter.value()); //prints out 6 % 3 = 0
modCounter.reset(); // count = 0
modCounter.increment(); // count = 1
System.out.println(modCounter.value()); //print 1 % 3 = 1
}
}
对象modCounter
是否有count
变量?如果没有,为什么modCounter.increment()
没有给我错误?
答案 0 :(得分:2)
继承的类具有其超类的所有成员,尽管它们可能无法直接访问它们(如果它们是private
)。在这种情况下 - 是的,ModNCount
的实例有count
成员。它无法访问它,因为它是私有的,但正如您所见,它可以使用increment
和reset
方法影响其值。