php 多态 方法重写,深入理解php面向对象的重写和多态

4f86d8c458bfb638206b5c73df16ffc1.png

自 PHP 5 起完全重写了对象模型以得到更佳性能和更多特性。PHP 5 具有完整的对象模型。

PHP中的对象都是引用类型,而不是整个对象的拷贝。对象的传递是引用类型传递。

一、什么是重写

重写override是面向对象编程的重要基础。是类的多态的一种实现。

重写是子类对父类的允许访问的方法的实现过程进行重新编写,即子类覆盖了父类的同名方法。

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要重写父类的方法。

我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了(重写父类方法)。

二、重写的方法名称必须相同

子类中的方法名称必须和父类中被重写方法的名称一致。

三、重写的访问权限规则

子类中方法的访问权限一定不能低于父类被重写方法的访问权限,也就是一定要高于或等于父类方法的访问权限。

父类: public,子类:只能是public

父类: protected,子类:可以是protected或public

父类: private, 子类:不能覆盖。即父类的私有成员,子类不能覆盖。

四、重写的参数要求

重写对方法参数的要求是兼容。即数量和类型不能少于被重写的函数。如果被重写方法指定了类型,那么类型的顺序必须一致。

而且要求参数的个数不能少于被重写方法的参数个数。即传递的参数名字可以为任意,传递的个数必须相同。

五、示例这个例子中我们创建了父类A,和它的子类B,将父类的方法复制到子类中,并测试重写情况。

class A

{//父类

public function test(){

$this->testPublic();

$this->testProtected();

$this->testPrivate();

}

public function testPublic() {

echo "A::testPublic\n";

}

protected function testProtected() {

echo "A::testProtected\n";

}

private function testPrivate() {

echo "A::testPrivate\n";

}

}

class B extends A

{//子类

public function testPublic() {

echo "B::testPublic\n";

}

protected function testProtected() {

echo "B::testProtected\n";

}

private function testPrivate() {

echo "B::testPrivate\n";

}

}

$obj = new B();

$obj->test();

输出如下:

B::testPublic

B::testProtected

A::testPrivate

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值