ところで、ラーメン屋では、ラーメンだけではなく、チャーシューメンとねぎラーメンも作っているとします。
ラーメン、チャーシューメン、ねぎラーメンを見比べてみると、とても似ていることが分かります。ラーメンに“チャーシュー”を載せると「チャーシューメン」、ラーメンに“ねぎ”を載せると「ねぎラーメン」であると考えることができますね(※こだわりラーメン屋では、チャーシューメンとねぎラーメンには独自のレシピがあるかもしれません。しかし話を単純化するために、それら特殊レシピについては考慮しないこととします)。
ここでは、Java言語のextends(継承)を用いてチャーシューメン・クラスとねぎラーメン・クラスを記述してみます。
CharSiuRamen.java | |
|
LeekRamen.java | |
|
この例では、どのラーメンもスープは同じ「とんこつ」です。このような、共通した性質を親クラスにまとめることを「汎化」と呼びます。逆に、チャーシューメン、ねぎラーメンは、ラーメンとトッピングが異なります。このように、共通していない性質を子クラスに付け加えることを「特化」と呼びます。
上記のソースコードでは、ラーメン・クラス、チャーシューメン・クラス、ねぎラーメン・クラスに、以下のような関係があるということが表現されています。
「汎化」「特化」は、Java言語上では「継承」により表現されることがよくありますが、場合により、「委譲」として実装されることもあります。
ラーメンの品ぞろえが増えたので、ラーメン料理人クラスにメソッドを追加して、さまざまなラーメンの注文を受けられるようにしましょう。
ラーメン、チャーシューメン、ねぎラーメンの3つの商品が必要です。
RamenCook.java | |
|
では、早速ねぎラーメンを注文してみましょう。
Customer.java | |
|
ねぎラーメンを注文するメソッドを呼び出すように変更し、ねぎラーメンの表示メソッドを呼び出します。
ラーメンを表示 トッピング : ねぎ スープ : とんこつ
ちゃんと、ねぎラーメンが出来上がっていますね。
続いて次ページでは、メッセージ・パッシング、カプセル化、多態性について解説します。
Copyright © ITmedia, Inc. All Rights Reserved.