多态性只是覆盖继承类的函数?

时间:2017-02-11 03:10:25

标签: php oop inheritance polymorphism abstraction

以下是我从另一篇文章中获取的代码: Is what seems like polymorphism in PHP really polymorphism?

class Animal {
    var $name;
    function __construct($name) {
        $this->name = $name;
    }
}

class Dog extends Animal {
    function speak() {
        return "Woof, woof!";
    }
}

class Cat extends Animal {
    function speak() {
        return "Meow...";
    }
}

$animals = array(new Dog('Skip'), new Cat('Snowball'));


foreach($animals as $animal) {
    print $animal->name . " says: " . $animal->speak() . '<br>';
}

1 个答案:

答案 0 :(得分:1)

  

多态性意味着刺激的发送者不需要知道   接收实例的类。接收实例可以跟随   一个任意的阶级。

     

Object-Oriented Software Engineering: A Use Case Driven Approach,   第55页)

在这种情况下,发件人是调用$animal->name$animal->speak()的print语句。对象实例可以是任意类,它实现属性name和方法speak,而整个过程仍然有效。因此,通过这个定义,多态性。

否则,多态性是什么意思? (不同的人可能对同一个词有不同的理解)