3. 継承 (親から受け継ぐ)
最初からすべて書かずに、親のコードをそのまま受け継いで再利用してみましょう!
似たようなクラスをまた作らなければならない時は、最初から書き直さずに、親の機能をそのまま受け継いでください!(継承)
この時は【親】を もとにしてを使い、親のコードを取得する時は親キーワードを使います。
【動物】を設計しよう:
『名前』を【文字列】の「名前なし」にしよう
最初に作られる時(【文字列】の『新しい名前』)次のようにしよう:
『私』の『名前』を『新しい名前』にしよう
〈鳴く〉を作ろう():
「動物が鳴きます。」を出力しよう
(参考)動物をもとにして子犬を設計します!
【動物】をもとにして【子犬】を設計しよう:
最初に作られる時(【文字列】の『新しい名前』)次のようにしよう:
親の〈最初に作られる時〉(『新しい名前』)を実行しよう
〈鳴く〉を作ろう():
枠「{『私』の『名前』}:ワンワン!」を出力しよう
『ポチ』を【子犬】の新しい【子犬】(「ポチ」)にしよう
『ポチ』の〈鳴く〉()を実行しよう
ご覧の通り、親の〈鳴く〉の代わりに子犬だけの〈鳴く〉が実行されましたね?これを上書き(Overriding)と言うんですよ。
親の機能はそのままにして、自分の好みに合わせて直して使えるんです!
誰の子供か確認する
あるオブジェクトが特定のクラスから作られたのか、あるいはその親の子供なのか気になる時は一種だを使ってみてください。
【動物】を設計しよう:
『名前』を【文字列】の「名前なし」にしよう
最初に作られる時(【文字列】の『新しい名前』)次のようにしよう:
『私』の『名前』を『新しい名前』にしよう
〈鳴く〉を作ろう():
「動物が鳴きます。」を出力しよう
【動物】をもとにして【子犬】を設計しよう:
最初に作られる時(【文字列】の『新しい名前』)次のようにしよう:
親の〈最初に作られる時〉(『新しい名前』)を実行しよう
〈鳴く〉を作ろう():
枠「{『私』の『名前』}:ワンワン!」を出力しよう
『テスト』を【子犬】の新しい【子犬】(「ワンちゃん」)にしよう
もし(『テスト』が【子犬】の一種だ)なら:
「このオブジェクトは子犬です!」を出力しよう
もし(『テスト』が【動物】の一種だ)なら:
「子犬は動物でもありますね!」を出力しよう
子犬は動物をもとにして作られているため、【子犬】の一種でもあり、【動物】の一種でもあるんですよ!
抽象クラス (骨組みだけ先に下設計する)
子供たちが共通で使う機能はあらかじめ作っておき、“この機能は子たちがそれぞれ自分で必ず作らなきゃダメ!”と強制したい時がありますね?
そんな時は設計しようの代わりに下設計しようを使って抽象クラスを作ってみてください。抽象クラスは直接オブジェクトとして作ることはできず、ただ他のクラスの元になるためだけに存在するんですよ。子供が必ず作らなければならない機能はなければならないでルールだけ決めてあげましょう!
【図形】を下設計しよう:
『色』を【文字列】の「青」にしよう
(参考:実装部のない抽象メソッドは'なければならない'で宣言します)
〈面積を求める〉がなければならない()
【図形】をもとにして【四角形】を設計しよう:
『横』を【数字】の0にしよう
『縦』を【数字】の0にしよう
最初に作られる時(【数字】の『初期の横』,【数字】の『初期の縦』)次のようにしよう:
『私』の『横』を『初期の横』にしよう
『私』の『縦』を『初期の縦』にしよう
(参考:親が指示したメソッドを必ず作らなければなりません!)
【数字】を返す〈面積を求める〉を作ろう():
(『私』の『横』*『私』の『縦』)を返そう
『私の四角形』を【四角形】の新しい【四角形】(10,20)にしよう
枠「四角形の面積は{『私の四角形』の〈面積を求める〉()}です。」を出力しよう
もし子クラスで〈面積を求める〉を作らなければ、Kanadeが厳しくエラーを出して教えてくれるはずです!