美文网首页
Polymorphism多态

Polymorphism多态

作者: Do_you | 来源:发表于2018-03-01 22:19 被阅读0次

    分析下面代码:

    <?php
    /**
    * Created by PhpStorm.
    * User: ZhouTengFu
    * Date: 2018/2/13
    * Time: 上午1:46
    */
    class Cat{
    function miau()
    {
    print 'miau';
    }
    }
    class Dog{
    function wuff()
    {
    print 'wuff';
    }
    }
    function printTheRightSound($obj)
    {
    if ($obj instanceof Cat)
    
    {
    $obj->miau();
    }else if($obj instanceof Dog){
    $obj->wuff();
    }else
    {
    print 'Error:Passed wrong kind of object';
    }
    print "\n";
    }
    
    printTheRightSound(new Cat());
    printTheRightSound(new Dog());
    
    poly.png

    可以很容易的看出这个例子是不可扩展的。如果想通过增加另外三种动物来扩展的话,你可能不得不在printTheRightSound函数中增加另外的三个elseif模块一遍检查你的对象时其中哪一种新动物的实例。而且接来下还要增加代码来调用方法。

    多态使用继承来解决这个问题。

    <?php
    /**
    * 这里可以使用接口或者抽象类
    * 一般情况,如果需要在父类实现一些方法的时候使用抽象类
    * 所有方法都不需要实现方法体的时候使用接口
    * Class Animal
    */
    abstract class Animal
    {
    abstract function makeSound();
    }
    class Cat extends Animal{
    function makeSound()
    {
    print 'miau';
    }
    }
    class Dog extends Animal {
    function makeSound()
    {
    print 'wuff';
    }
    }
    function printTheRightSound($obj)
    {
    if ($obj instanceof Animal)
    {
    $obj->makeSound();
    }else
    {
    print 'Error:Passed wrong kind of object';
    }
    print "\n";
    }
    
    printTheRightSound(new Cat());
    printTheRightSound(new Dog());
    

    你可能发现无论网这个例子中增加多少种动物类型。都不需要对printTheRightSound函数做任何更改。

    相关文章

      网友评论

          本文标题:Polymorphism多态

          本文链接:https://www.haomeiwen.com/subject/hwanxftx.html