オラクルのチュートリアルを読んで「継承」に関して理解を深めます。
英語なので翻訳して読みました。
ここでいう「継承」とは下のような書き方でクラスの継承を行うときに出てくる言葉です。下にソースを示します。
public MyClass extends ParentClass { /** フィールド */ private int myNo; /** コンストラクタ */ public MyClass() { } }
「ParentClass」が親クラス(スーパークラス)です。そして「MyClass」が子クラス(サブクラス)になります。このような関係のことを「継承」と呼びます。
補足
そしてSpring, Playなどのフレームワークを作ろうとしたときにこの「継承」は必須の技術となり、オリジナルの仕組み(フレームワーク)を作る時の基礎になります。
自転車の例
自転車をクラスとして表現した場合に、マウンテンバイクや、ママチャリ、三輪車etcはどのようになるの?という疑問が出ます。それは下のような関係図を作ることができます。
マウンテンバイクなどは「自転車」のカテゴリに属するものです。なので上のような関係図を作りました。
この「関係図」はイメージでも良いです。
そして、この関係をクラスで表現すると下のようになります。
自転車(単純化したもの)
自転車をクラスで表現するために「仕様」を決めます。
- 以下の状態(パラメータ)がある
・移動スピード
・頑丈さ
・重さ - 同様に以下の動作を行う
・走る
・止まる
・飛ぶ(空中にいる)
そして、コードで書くと、大まかに下のようになります。
<自転車クラス>
class Bicycle { protected double speed; protected int toughNess; protected double weight; public void run() { } public void stop(){ } private void jump() { } }
<マウンテンバイク>
class MountainByke extends Bicycle { /** ギアの数 */ private int gears; /** タイヤのタイプ */ private int type; /** ウィリー */ public void Welyee() { } }
このようにコードを書くことができます。
この場合、マウンテンバイクは自転車のフィールドを参照することができ。run(), stop()を参照することができます。つまりマウンテンバイククラスの中に左のメソッドを作らなくても使用する事が可能という事です。
ちなみに、「jump()」は「private」なので参照することができません。フィールドも「private」「protected」「public」の修飾子で参照の可否が決まってきます。
「private」クラスの中だけ参照可能
「protected」クラスの継承関係内で参照可能
「public」何処からでも参照可能
まとめ
- 親クラス('スーパークラス)と子クラス(サブクラス)の関係を作ることで、複数作るクラスのコードを減らすことができる。
- 親クラスを作ることで、サブクラスをカテゴリ分けすることができる
- 親クラスの実装は子クラスで使用でき、改めて実装する必要はない、書き換えたいときだけ「オーバーライド」してやる
こんな感じで、クラスの継承関係を使用して少ないコードで大きなものを作れます。
そして、オリジナルフレームワークを作ることも可能です。
さらに、「インターフェース」への理解もあれば、オリジナル・ディペンデンシー・インジェクションも作れそうです。
でわでわ。。。