up:: Programming
source:: 抽象クラスとは - 抽象クラスとインターフェース - Java入門
抽象クラス
クラスを作っていると、「下位クラスに必ず持たせたい名前のメソッド」が必要になるときがある。
しかし、それは必ずしも 「処理が必要なメソッド」でない ことがある。
abstract class AbstractHuman
{
public void walk()
{
// 歩く処理
}
protected void talk()
{
// 話す処理(オーバーライド予定)
}
}
class Human : AbstractHuman
{
protected override void talk()
{
// 話す処理
}
}
この時、AbstractHumanクラスのtalkメソッドはいつもオーバーライドされている。
単純に読むだけだと、talkはオーバーライド必須のメソッドであるとは見分けにくい。
そこで抽象クラスの出番。
abstract class AbstractHuman
{
public void walk()
{
// 歩く処理
}
// 抽象メソッド
abstract protected void talk();
}
class Human : AbstractHuman
{
protected override void talk()
{
// 話す処理
}
}
クラス頭にabsractをつけ、抽象メソッド持ちであることを明示する。
さらに抽象メソッド頭にもabstractをつけて、どれが抽象メソッドなのかわかりやすくする。
ポイントとして、抽象クラスは 単体でインスタンスを作れない。 必ずextendsで子クラスを作らなければならない。
また、抽象メソッドにはメソッドの中身を示す {}がない 。
強みは通常の親クラスと同じく、メソッドを持ち子クラスに渡せること。また、protectedが使えるのも強い。
なお、コードが複雑になるのでむやみやたらな実装はご法度。