詳細未定のメソッド
例えば、車や自転車のメソッドがあるとします。乗り物はすべて「走行する」機能を持ちます。
プログラム上でも、Vehicleクラス(車両)を継承するすべてのクラスはrunメソッド(走行)を持っていたほうがいいです。
よって本来であれば、runメソッドはVehicleクラスに定義し継承できればいいのですが、乗り物ごとに走行方法が違うため、Vehicleクラスでは処理内容を定めることができません。
抽象メソッド
処理が未定のメソッドを定義する方法は、メソッドの先頭に「abstract」をつけることで、抽象メソッドというメソッドを定義できます。抽象メソッドには中身の処理は書きません。
「abstract」とは「抽象的な」という意味です。具体的な処理が決まっていない未完成のメソッドであるため、「抽象メソッド」と呼ばれます。
抽象メソッドは、サブクラスがそのメソッドをオーバーライド(上書き)していなければエラーになります。
なので、サブクラスがそのメソッドをオーバーライドし、処理内容を定義することを強制できます。
サブクラスに、あるメソッドを必ず持たせたいという場合は、スーパークラスに抽象メソッドとして定義しておきます。
抽象クラス
抽象メソッドを1つでも持つクラスは、「抽象クラス」と呼ばれ、クラス名の前に「abstract」をつけます。
抽象クラスはインスタンスを生成できません。抽象メソッドという未完成のメソッドを持つクラスは、それもまた未完成です。
未完成のクラスからはインスタンスを生成できません。
【例】
abstract class SuperClass { // 抽象クラスの定義
abstract public void hello(); // 抽象メソッドの定義
}