質問するログイン新規登録

回答編集履歴

1

訂正

2018/05/04 18:17

投稿

HogeAnimalLover
HogeAnimalLover

スコア4860

answer CHANGED
@@ -1,3 +1,26 @@
1
1
  単に字面の通り、「同名のメソッドで別の機能のもの」と捉えただけではポリモーフィズムとはいえません。極端な話、名前空間が異なれば同名の関数を定義することも簡単です。これはオブジェクト指向言語でなくとも当然のことです。
2
2
 
3
+ 修正
3
- ポリモーフィズムとは継承によって作成した派生クラスにおいてメソッドのオーバーライド(同名、同引数のメソッドを上書き定義すること)で実現します。
4
+ ~~ポリモーフィズムとは継承(実装)によって作成した派生(実装)クラスにおいてメソッドのオーバーライド(同名、同引数のメソッドを上書き定義すること)で実現します。~~
5
+
6
+ **以下、追記**
7
+ 他の回答を見て、私も調べなおしました。必ずしも継承(実装)が必要というわけではないという資料がありました。例えばオーバーロードとかテンプレート(ジェネリクス)によるものであってもポリモーフィズムと呼ぶそうでした。こうなるとDLLの差し替えとかも一種のポリモーフィズムと呼べると解釈できるのかもしれません。
8
+
9
+
10
+
11
+ ただし、課題の中で提示されたプログラムはポリモーフィズムとは呼べないという考えは変わりありません。
12
+
13
+ > $a = new A();
14
+ $b = new B();
15
+ $a->method();
16
+ $b->method();
17
+
18
+ ↑の部分を分離し、↓のように別ファイルにすることができればポリモーフィズムと呼べると思います。
19
+
20
+ PHPファイル1の一部
21
+ $x = new A();
22
+
23
+ PHPファイル2の一部
24
+ $x->method();
25
+
26
+ これならばPHPファイル1に修正をするだけでPHPファイル2の呼び出し先を変更できるのでポリモーフィズムと呼べると思います。