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