前提・実現したいこと
Animalという抽象クラスを作り、そのクラスを継承したDogクラスとCatクラスを下記のコードのように実装しました。プログラム自体はエラーもなく動き、下の実行結果のようになります。ただ、自分が実装したかったのはWoofと表示した数だけ、Meowと表示した数だけ、それぞれ一番下の文(5 woofs and 5 meow)に表示したかったプログラムです。3 woofs and 2 Meow と表示したいです。おそらくAnimalクラスのcountがDogクラスとCatクラスのどちらにも反映されていると思ったのですがこの認識で正しいでしょうか?
発生している問題・エラーメッセージ
Woof
Meow
Meow
Woof
Woof
5 woofs and 5 meow
abstract class Animal { private static int count; public static void increment() { count++; } public static int getCount() { return count; } abstract void noise(); } class Dog extends Animal { public Dog() {}; public void noise() { System.out.println("Woof"); increment(); } } class Cat extends Animal { public Cat() {}; public void noise() { System.out.println("Meow"); increment(); } } public class Counter{ public static void main(String[] args) { Animal[] a = {new Dog(), new Cat(), new Cat(), new Dog(), new Dog()}; for (int i = 0; i < a.length; i++) a[i].noise(); System.out.println(Dog.getCount() + " woofs and " + Cat.getCount() + " meow"); } }
試したこと
class Dog extends Animal {
public Dog() {};
public void noise() {
System.out.println("Woof");
increment();
}
}
↓
class Dog extends Animal {
public Dog() {};
public void noise() {
System.out.println("Woof");
this.increment();
}
}
としてみたが結果は変わらなかった。
既存のプログラムのgetCountメソッド下記のようにabstractメソッドにして実装してみたが結果は同じ
abstract class Animal {
public static int count;
public static void increment() { count++; }
abstract int getCount();
abstract void noise();
}
class Dog extends Animal {
public Dog() {};
public void noise() {
System.out.println("Woof");
increment();
}
public int getCount() {
return this.count;
}
}
class Cat extends Animal {
public Cat() {};
public void noise() {
System.out.println("Meow");
increment();
}
public int getCount() {
return this.count;
}
}
public class Counter{
public static void main(String[] args) {
Animal[] a = {new Dog(), new Cat(), new Cat(), new Dog(), new Dog()};
for (int i = 0; i < a.length; i++)
a[i].noise();
System.out.println(Dog.getCount() + " woofs and " + Cat.getCount() + " meow");
}
}