PHP 面向对象基础:重载父类方法 1 个改进

什么是重载父类方法?

子类可以定义一个和父类相同名字的方法,从而覆盖掉原来父类的方法,也可以在方法中添加的新的功能,从而实现重载父类的方法。

为什么需要重载父类方法?

子类重载父类方法可以节省代码量,因为没有必要再去写一遍父类的方法。由于父类名称可能改变,所以子类覆盖父类中的方法时可以采用关键字 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 ,子类无法实现重载父类方法。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!