3

例如,如果您有一个名为“User”的类和另一个名为“Admin”的扩展“User”的类,并且您希望 Admin 继承 User 的所有属性、方法,例如 __construct 方法。

class User {
private $name;

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

class Admin extends User {
private $authorization;

function __construct($name,$authorization) {
$this->name = $name;
$this->authorization = $authorization;
}
}

它是否正确?管理员是否覆盖用户的构造方法?如果扩展类具有相同的方法名称,我认为它是无效的。我完全错过了课程扩展的意义吗?

4

3 回答 3

8

它不是无效的。类继承的一个方面是,您可以覆盖方法并提供另一种实现。

但在你的情况下,我会做

class Admin extends User {
    private $authorization;

    function __construct($name,$authorization) {
        parent::__construct($name);
        $this->authorization = $authorization;
    }
}

因为您已经在父类中实现了“名称分配”。这是一种更清洁的方法。

于 2010-02-15T23:02:12.030 回答
1

是的,这就是extends的用途。您可以覆盖所有方法。

您甚至可以在子类的方法中使用相同命名的父类。

参见:parent关键字

于 2010-02-15T23:02:03.833 回答
1

不,这是完全合法的,因为您正在覆盖用户的构造函数。一般来说,扩展类中具有相似名称的方法会“覆盖”其父类的方法。

请记住,尽管修饰符确实在这里发挥了作用:超类中的“私有”声明方法不会被覆盖,因为它们不会被扩展类继承。“最终”声明的方法不能被扩展类覆盖 - 在任何情况下。

于 2010-02-15T23:02:59.923 回答