1
は考える:Subclassコンストラクタは、スーパークラスコンストラクタから変数を継承しますか?
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()
は間違いを何度も与えていません。
はい、いいえ。 'count 'はそこにありますが、プライベートなので、直接アクセスすることはできません。公に宣言されたメソッドにアクセスできます。これはかなり標準的なクラス継承です。 – markspace
チュートリアルによると、 'private'メンバ(フィールドとメソッド)はサブクラスによって継承されていないと言われています。それらは「そこに」ありますが、サブクラスはそれらにアクセスできないため、そこには存在しません。 https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html – markspace