Wikipedia にはポリモーフィズムの定義があります: オブジェクト指向言語では、インターフェイスの複数の異なる実装がポリモーフィズムです
この記事をお読みください:
http://www.cnblogs.com/tecs27/archive /2012/03/13/2394028 .html
プロセス制御を使用するコード セグメントは次のとおりです。 ポリモーフィズムを示すために、ポリモーフィズムを使用するコード スニペットを以下に示します。
class painter{ //定义油漆工类 public function paintbrush(){ //定义油漆工动作 echo "油漆工正在刷漆!\n"; } } class typist{ //定义打字员类 public function typed(){ //定义打字员工作 echo "打字员正在打字!\n"; } } function printworking($obj){ //定义处理类 if($obj instanceof painter){ //若对象是油漆工类,则显示油漆工动作 $obj->paintbrush(); }elseif($obj instanceof typist){ //若对象是打字员类,则显示打字员动作 $obj->typed(); }else{ //若非以上类,则显示出错信息 echo "Error: 对象错误!"; } } printworking(new painter()); //显示员工工作 printworking(new typist()); //显示员工工作
class employee{//定义员工父类 protected function working(){//定义员工工作,需要在子类的实现 echo "本方法需要在子类中重载!"; }}class painter extends employee{//定义油漆工类 public function working(){//实现继承的工作方法 echo "油漆工正在刷漆!\n"; }}class typist extends employee{//定义打字员类 public function working(){ echo "打字员正在打字!\n"; }}class manager extends employee{//定义经理类 public function working(){ echo "经理正在开会!"; }}function printworking($obj){//定义处理方法 if($obj instanceof employee){//若是员工对象,则显示其工作状态 $obj->working(); }else{//否则显示错误信息 echo "Error: 对象错误!"; }}printworking(new painter());//显示油漆工的工作printworking(new typist());//显示打字员的工作printworking(new manager());//显示经理的工作
ディスカッションへの返信 (解決策)
どの例でも機能します。最初の例はより一般的で、サブクラスの実装を確実にするために親クラスで仮想関数を使用するのが最善です。ポリモーフィズムは「同じインターフェイス」、「異なる実装」です。その他の詳細については心配しないでください... ポリモーフィズムの鍵は、「同じ「インターフェース」、「異なる実装」です。その他の詳細は気にしないでください...
先生、ありがとうございます。PHP には仮想関数はありますか?
php では抽象関数と言うべきです...
http://www.php.net/manual/en/ language.oop5.abstract.php
Comprehension Comprehension Comprehension....
しかし、このコードでは $a が親クラスを介して talk メソッドを呼び出していることがわかりません。ステップですが、前のオブジェクトは新しいオブジェクトのメソッドをすべて呼び出します。 print_r($a); 誰が誰なのかすぐにわかります
http://www.php.net/manual/en/ language.oop5.abstract .php
Virtual この関数は静的遅延バインディングだと言っている人もいますが、私はそれのように見えると思います。なぜ抽象関数はサブクラスの実装を保証できるのでしょうか?
投稿者 chenlong451 からの返信を引用: しかし、このコードは $a が親クラスのステップを通じて talk メソッドを呼び出すことを示していません。代わりに、新しいオブジェクトが前のオブジェクトをカバーし、新しいオブジェクトのメソッドが完全に呼び出されます。 print_r($a); 誰が誰なのかすぐにわかります
xuzuning 先生が来ました、ヒントをありがとう。
print_r 後の結果は
class Animal { var $voice = '未定义'; var $root; function __construct() { $this->root = $this; } function signal($o) { $this->root = $o; } function Talk() { echo $this->root->voice; }} class Cat extends Animal { var $voice = '喵';} class Dog extends Animal { var $voice = '汪汪';} $a = new Animal; $a->Talk(); $a->signal(new Cat);$a->Talk(); $a->signal(new Dog);$a->Talk();
なぜ取材なのか?
理由を教えてください
なぜ取材するのですか?
理由を教えてください