○基本知識の おさらい
クラスは,「属性」と「動作」(振る舞い)から構成されます. たとえば「自動車」クラスを例に取ります.
自動車このように表現することができます.
- 属性
- 色
- メーカ
- 動作
- エンジンを始動する / 停止する
- 加速する / 減速する
- ギアを切り替える
しかし,いま作成した「自動車」クラスは まだまだ抽象的な表現に見えます. つまり汎用性があります. 「自動車」クラスを「エンジン付き乗り物」という名前に変えてしまいましょう. この「エンジン付き乗り物」クラスに「4輪」という属性を付ければ「自動車」に, 「2輪」という属性ならば「オートバイ」クラスに変化します. 変化という言い方はおかしいですが,これが クラスの継承 ということになります.
「継承」は,UML(Unified Modeling Language)では「汎化」と「特化」の関係 として扱われています.もちろん Java では「親クラス」「子クラス」です. 英語で言うなら「Super class」と「Sub class」.
クラス定義は,いかに同じ性質を括り出せるかが1つのポイントです.
いつもいつも考える必要はありませんが,クラス化する対象物があったとしたら
その「もの」をある程度「汎化」して1つのクラスを定義します.
そのクラスを基に肉付けしていき,目的のクラスを作成しましょう.
上の文章の「基に肉付け」は,「継承して特化」と言い換えられます.
こうすることで,継承元となった親クラスは次に使いまわせるかもしれません.
汎用性があるとは,再利用できる可能性が高いということです.
これがオブジェクト指向の原点になります.