如果您有一个名为“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;
}
}
这是对的吗? Admin是否覆盖User的构造方法?如果扩展类具有相同的方法名称,我认为它是无效的。 我是否完全忽略了课程延伸的重点?
答案 0 :(得分:4)
这不是无效的。类继承的一个方面是,您可以覆盖方法并提供另一种实现。
但在你的情况下,我会做
class Admin extends User {
private $authorization;
function __construct($name,$authorization) {
parent::__construct($name);
$this->authorization = $authorization;
}
}
因为您已在父类中实现“名称分配”。这是一种更清洁的方法。
答案 1 :(得分:0)
答案 2 :(得分:0)
不,这是完全合法的,因为你重写了User的构造函数。一般来说,扩展类中具有相似名称的方法“覆盖”其父级。
请记住,虽然修饰符在这里发挥作用:超类中的“私有”声明方法不会被覆盖,因为它们不会通过扩展类继承。