0~4に順番に押していく。
抽象クラスAnimalを定義。抽象メソッド naku を定義。このクラスはnewできない。
DogはAnimalを単純に継承した状態。抽象メソッドnakuをオーバーライドしておらず、エラーになる。
Dogは抽象メソッドnakuをオーバーライドしたのでエラーは無くなる。Dogはnew可能。
Catは抽象メソッドnakuをオーバーライドせず、abstractクラスになっている。エラーは無いが、このクラスはnewできない。
Catクラスを継承し、naku をオーバーライドしている。抽象クラスでは無いので、このクラスはnewできる。
class Sample{ public static void main(String[] args) {Animal a = new Animal(); // エラーDog d = new Dog(); // 可能Cat c = new Cat(); // エラーMikeCat c = new MikeCat(); // 可能} }abstract class Animal{ String name; abstract public void naku(); // 抽象メソッド }class Dog extends Animal{public void naku(){ System.out.print("わん"); }}abstract class Cat extends Animal{ }class MikeCat extends Cat{ public void naku(){ System.out.print("ニャー"); } }