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("ニャー");
}
}