PHP 面向对象基础:重载父类方法
什么是重载父类方法?
子类可以定义一个和父类相同名字的方法,从而覆盖掉原来父类的方法,也可以在方法中添加的新的功能,从而实现重载父类的方法。
为什么需要重载父类方法?
子类重载父类方法可以节省代码量,因为没有必要再去写一遍父类的方法。由于父类名称可能改变,所以子类覆盖父类中的方法时可以采用关键字 parent 来代替父类名称使用,便于后期编程的修改。子类也可以完全重写父类的方法,实现自己的特定功能。
class Parents
{
public $name;
protected $age;
private $addr;
public function __construct($name, $age, $addr)
{
$this->name = $name;
$this->age = $age;
$this->addr = $addr;
}
public function getName()
{
echo 'This is ' . $this->name . '.<br />';
}
protected function getAge()
{
echo 'Parents\' age is ' . $this->age . '.<br />';
}
private function getAddr()
{
echo 'Parents\' address is ' . $this->addr . '<br />';
}
}
子类定义同名函数,使用关键字 parent 实现重载父类方法
class Son extends Parents
{
public function getName()
{
parent::getName();
}
protected function getAge()
{
echo 'Son\'s age is ' . $this->age . '.<br />';
}
}
子类对象成功调用重载后的方法
$son = new Son('Bob', 25, 'Beijing, China');
// This is Bob.
$son->getName();
也可以完全重写父类方法
public function getName()
{
echo 'Son\' name is ' . $this->name. '.<br />';
}
此时对象调用重载后的方法输出
Son' name is Bob.
注意
如果父类方法修饰符是 public ,子类重载父类方法修饰符也只能是 public ;如果父类方法修饰符是 protected ,子类重载父类方法修饰符只能是 public 或者 protected;如果父类方法修饰符是 private ,子类无法实现重载父类方法。