質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

992閲覧

多態性の理解がこれで合っているのか確認したいのですが、例を見ていただけませんか?

heysuky

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/06/09 01:06

例えばAnimalクラスがあって、それを継承した犬、猫、鳥のサブクラスがあったとします。
親クラスのAnimalにはeat();メソッドがあるとして、サブクラスのどれも食べる動作をしますが食べる物や食べ方などは違ってくるので、それぞれの継承先でeat();メソッドの中身をドッグフードを食べる、キャットフードを食べる、虫を食べるなどに書き換えます(これをオーバーライドというんですよね?)。

つまりeat();のメソッド名が親クラスや他のサブクラスと同じでも内容が異なってきます。
このメソッド名が同じでも行動がそれぞれの継承先のクラス(インスタンス)で異なることを多態性と言うと認識しているのですが、これは合っていますか?
もし違っていれば、あるいは抜けている情報があれば補足情報など教えて頂きたいです。

こういう質問の仕方がいいのか悪いのかわかりませんが、悪かったら申し訳ないです。よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heysuky

2020/06/09 02:01

お二人方ありがとうございます!!自信が付きました。 インターフェースの実装でも同じことが言えるのですね。補足情報ありがとうございます。
guest

回答2

0

ベストアンサー

その説明は多態性の半分ぐらいです。

「メソッド名が同じでも行動がそれぞれの継承先のクラス(インスタンス)で異なること」は多態性のための前準備です。
その上で「単一のメソッド呼び出しが実行時に異なる振る舞いをすること」ができてはじめて多態性が実現できたといえるのです。


java

1Animal a; 2() 3a = getSomeAnimalInstance(); 4() 5a.eat(); //☆

というコードが書けて、☆の位置で「実際にどのクラスのeatメソッドが呼ばれるか?」が実行時に決まることが多態性です。

追記
もう少し詳しく書くと。
☆部分のa.eat();というコードが何を実行するかはコンパイルした時には決まっていません。
getSomeAnimalInstance();が猫のインスタンスを返してきたら☆で実行されるのは"猫のeatメソッド"になります。犬のインスタンスを返してきたら"犬のeatメソッド"になります。

このような「☆の部分に書かれているコードが単一的でもあるにも関わらず、猫のeatメソッドが呼ばれるのか犬のeatメソッドが呼ばれるのかがコンパイル時点で決まることなく実行時に変化するという性質」のことを多態性と呼びます。


蛇足
Javaカテゴリなのでこれで十分ですが、このやり方は多態性を実現する手段の一例でしかありません。
クラススタイルのオブジェクト指向プログラミング言語ではこういう手段で多態性を実現しますが、クラススタイルではないオブジェクト指向プログラミング言語やオブジェクト指向ではないプログラミング言語では別の手段で多態性を実現しますよ。

投稿2020/06/09 02:20

編集2020/06/09 02:52
quickquip

総合スコア11235

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heysuky

2020/06/19 01:05

返事が遅くなってしまいましたが、補足して頂けてとても理解が深まりました。分かりやすい解説ありがとうございます!
guest

0

あってます。

あくまで概念の話をされているので、おそらく他の方も「あってます」以外の感想はないかと思いますが、、、
抽象化の話を抽象的な話でまとめるというユーモアが効いていていいですね。

ちなみに回答して置おいてなんですが、今後は「あってるかどうか」についてはググって調べてください。
ぐぐっても確証が得られなかった要素についてもっとフォーカスできると、よい回答があるまるかと思います。

補足ですが、偶然にも同じanimalクラスのたとえ話をしているサイトを見つけたので、下記でも答え合わせをしてみてはいかがでしょうか。
https://jpazamu.com/object-polymorphism/

投稿2020/06/09 02:05

Rocky

総合スコア261

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heysuky

2020/06/19 01:11

皮肉は必要ないと思いましたが、確かにおっしゃる通りですね。 リンク先分かりやすくて助かりました。ありがとうございました。
Rocky

2020/06/19 01:41

もしご気分を害されていたら失礼しました。 今後も学習がんばってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問