0~4に順番に押していく。
インタフェース Animalを定義。メソッド naku は自動的にpublic abstractになる。
DogはAnimalを単純に実装(implements)した状態。抽象メソッド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(); // 可能} }interface Animal{ void naku(); // 抽象メソッド }class Dog implements Animal{public void naku(){ System.out.print("わん"); }}abstract class Cat implements Animal{ }class MikeCat extends Cat{ public void naku(){ System.out.print("ニャー"); } }