Subclass构造函数是否从Superclass构造函数继承变量?

问题描述 投票:1回答:1

鉴于:

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()没有给我一个错误?

java inheritance constructor subclass private
1个回答
2
投票

继承的类具有其超类的所有成员,尽管它们可能无法直接访问它们(如果它们是private)。在这种情况下 - 是的,ModNCount的一个实例有一个count成员。它无法访问它,因为它是私有的,但是,正如您所见,它可以使用incrementreset方法影响其值。

© www.soinside.com 2019 - 2024. All rights reserved.