ベストアンサー
このベストアンサーは投票で選ばれました
ポリモーフィズムとはメソッドに多様な振る舞いをさせる設計概念です。 継承などはよく使いますが、インターフェースは滅多に使うことはないです。 2つとも、とても便利ですが、なくてもプログラムは作れます。(設計概念だけに) そもそも、オブジェクト指向自体も設計概念ですので、それを考えなくてもプログラムを作ることはできます。 しかし、1つのクラスに全て記述した場合ソースがグチャグチャで読みづらいわ、バグでるわとなってしまいます。 オブジェクト指向はそういった問題を解決し、よりよいソースを書くために必要な概念なのです。 ポリモーフィズムはオブジェクト指向のなかでは、最も抽象的な概念です。 それだけに便利です。 概念だけでは理解しづらいと思いますので、下に例を書いてみました。 例えば、javaでドラクエのコピーゲームを作るとします。 まずは、モンスターを作成したいと考えたとき、各モンスターを1つ1つのクラスで定義したとします。(無駄ですが説明のため) つまり、Slime(スライム)クラス,Tamanegikozouクラス......をつくります。 それぞれ、ステータス(変数)と行動(メソッド)を定義します。 hpはいくつ,mpはいくつ,atk(こうげき)は....attack(攻撃)メソッドの内容は... 各クラス同じような内容が続くと思います。 思わず、int hp; などと宣言してる部分,滅多に内容が変わらない attack()メソッドなどを 〃 〃 〃... としていきたくならないでしょうか? 実はこの問題を解決できることがポリモーフィズムの長所の1つです。 まず、monsterクラスを作成します。 ステータスの宣言,各種メソッドのデフォルトの内容(attackメソッドは 相手のhp -= atk(こうげき)など) といった多くのクラスで共通する部分をあらかじめ記述しておきます。 あとは各クラスにmonsterクラスを継承するだけで、宣言やattackメソッドなどを書く必要がなくなります。 もし、attackメソッドなどを違う内容にしなければならないときは、そのままattackメソッドを宣言し、内容を記述しなおせばいいのです。 そうすると、monsterクラスのattackメソッドはキレイサッパリなくなり、新しいattackメソッドの内容に上書きできます。 これを "オーバーライド" といいます。 他にも "オーバーロード" といった便利な機能があります。 引数の種類を変えれば、同名のメソッドを定義できるというものです。 いい例えが思いつきませんが、攻撃する際に "こうげき" のみでダメージ判定されるものと "こうげき" と "まりょく" でダメージ判定される攻撃の二つがある場合、必要な引数が前者で1つ、後者で2つなのでどちらも記述できるといったカンジです。 最後にインターフェースです。 インターフェースでは変数やメソッドを空の状態で宣言しておき、実装したクラスで内容を記述するというものです。 最大の長所として、 "多重継承" に似たことできること。 多人数で作業した際にテンプレ的な役割ができること。(他の人がみたさいに、クラスの構造がすぐに理解できる) あとは java ジェネリック で検索するとインターフェースの真価がわかると思います。 最後に......まずは、オブジェクト指向の基礎を勉強しましょう。
この回答はいかがでしたか? リアクションしてみよう
その他の回答(2件)
ID非表示さん
2009/9/19 23:35
正直、理解できずとも良いです。 と、言うのは、ポリモーフィズムが判らない、と言う事は、 その前にオブジェクト指向の理解が足りていない、または ポリモーフィズムが必要なコーディングを今まで必要としていない、 もしくは、ポリモーフィズム以前に判っていない事が多い、 ということです。 教材を読んでも判らないときは、 実際に質問できる人に質問するべきです。 質問できる相手が居ないのであれば、 インターネットで java ポリモーフィズム で検索すれば、沢山出てきます。 知恵袋でも、ポリモーフィズムについて多数回答してきておりますので、 それもご覧になってください。
おぉー、ほぉほぉ。 パンがなければ、ケーキを食べればいいのに。 ポリモーフィズムが分からなければ、関数をたくさん書けばいいのに。