多语言展示
当前在线:1432今日阅读:84今日分享:32

PHP构造方法和析构方法在继承中的表现 覆盖重写

PHP构造方法和析构方法在继承中的表现 覆盖(override)——重写
工具/原料

PHP构造方法和析构方法在继承中的表现 覆盖(override)——重写

PHP构造方法和析构方法在继承中的表现
1

1,子类中如果没有构造方法,则子类在实例化的时候,会自动调用父类构造方法(如果有);1.1,推论:此时,子类实例化时的实参,需要按照父类构造方法的对应形参给定;2,子类中如果没有析构方法,则子类在被销毁的时候,会自动调用父类析构方法(如果有);3,如果子类有构造方法,则不会自动调用父类构造方法,但我们可以在其中手动调用:parent::__construct()4,如果子类有析构方法,则不会自动调用父类析构方法,但我们可以在其中手动调用:parent::__destruct() 下面演示自动调用父类构造方法的情形:

2

类和对象的访问总结图:

覆盖(override)——重写
1

含义:一个子类继承了父类的特征信息(私有的继承不了),但又自己来重新定义父类继承给自己的特征信息,这种现象就称为“覆盖”(重写)——override。 先考察一个下级使用上级类显示信息而不“完全”的例子:

2

于是,我们在子类中,“亲自”来定义一个显示信息的方法,该方法跟父类的方法同名:(同名的目的可以认为“做同样的事情”):

3

该代码明显有2行是跟父类的同名方法所做的事情是一样的,则改进如下:

4

总结:只要在(设计)下级类的时候,认为上级类给自己的属性或方法“不够好”(不够自己所需),就可以重新定义这些属性或方法,就构成了“重写”。

重写的基本要求:
1

访问控制权限:下级类重写上级类的同名属性或方法时,所使用的访问控制修饰符“不能更狭小”,即:上级是public,下级只能是public上级是protected,下级只能是protected和public上级是private,下级:此时覆盖不了,方法覆盖的时候,下级方法的参数要求跟上级方法的参数“一致”:特例:构造方法也可以重写,但此时不要求参数一致。私有属性和私有方法的重写问题:私有属性和方法都不能覆盖,但其实子类可以定义跟父类私有的同名属性或方法。只是当作一个自身的新的属性或方法来看待而已

2

可见:父类的p1(public属性)和p2(protected属性)都被子类覆盖率。而:父类的p3(private属性)并没有被覆盖,虽然在类中不能使用。同时,子类中可以定义出自己的p3属性。

推荐信息