いまさら聞けないJavaによるオブジェクト指向の常識:プログラマーの常識をJavaで身につける(11)(3/5 ページ)
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、Javaを学習する際によく耳にする「オブジェクト指向」について。いまさら聞けない人はぜひ読んでみてください。
「汎化・特化」、Javaでは多くの場合「継承」
ところで、ラーメン屋では、ラーメンだけではなく、チャーシューメンとねぎラーメンも作っているとします。
ラーメン、チャーシューメン、ねぎラーメンを見比べてみると、とても似ていることが分かります。ラーメンに“チャーシュー”を載せると「チャーシューメン」、ラーメンに“ねぎ”を載せると「ねぎラーメン」であると考えることができますね(※こだわりラーメン屋では、チャーシューメンとねぎラーメンには独自のレシピがあるかもしれません。しかし話を単純化するために、それら特殊レシピについては考慮しないこととします)。
ここでは、Java言語のextends(継承)を用いてチャーシューメン・クラスとねぎラーメン・クラスを記述してみます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この例では、どのラーメンもスープは同じ「とんこつ」です。このような、共通した性質を親クラスにまとめることを「汎化」と呼びます。逆に、チャーシューメン、ねぎラーメンは、ラーメンとトッピングが異なります。このように、共通していない性質を子クラスに付け加えることを「特化」と呼びます。
上記のソースコードでは、ラーメン・クラス、チャーシューメン・クラス、ねぎラーメン・クラスに、以下のような関係があるということが表現されています。
- ラーメン・クラスはチャーシューメン・クラスを汎化したもの
- ラーメン・クラスはねぎラーメン・クラスを汎化したもの
- チャーシューメン・クラスはラーメン・クラスを特化したもの
- ねぎラーメン・クラスはラーメン・クラスを特化したもの
上級者向けの注意!
「汎化」「特化」は、Java言語上では「継承」により表現されることがよくありますが、場合により、「委譲」として実装されることもあります。
ラーメン料理人クラスにメソッドを追加
ラーメンの品ぞろえが増えたので、ラーメン料理人クラスにメソッドを追加して、さまざまなラーメンの注文を受けられるようにしましょう。
ラーメン、チャーシューメン、ねぎラーメンの3つの商品が必要です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
では、早速ねぎラーメンを注文してみましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ねぎラーメンを注文するメソッドを呼び出すように変更し、ねぎラーメンの表示メソッドを呼び出します。
ラーメンを表示 トッピング : ねぎ スープ : とんこつ
ちゃんと、ねぎラーメンが出来上がっていますね。
続いて次ページでは、メッセージ・パッシング、カプセル化、多態性について解説します。
Copyright © ITmedia, Inc. All Rights Reserved.