抽象クラス

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