php 父类调用子类方法,子类覆盖父类方法?

用户投稿 94 0

关于“php_父类的父类方法”的问题,小编就整理了【4】个相关介绍“php_父类的父类方法”的解答:

子类覆盖父类方法?

当子类和父类中出现同名同参方法时,需要进行覆盖(重写),否则将会编译失败。

覆盖时需要子类方法权限大于等于父类方法权限(当父类权限为private时,为父类私有方法,此时因此方法未继承给子类,此时将不会发生覆盖)。

若父类子类方法中某一个为静态方法,此时将无法进行覆盖,编译错误。

若父类子类方法同名同参的两个方法皆为静态方法,此时,可正常覆盖。

PHP abstract抽象类定义与用法示例?

PHP抽象类应用要点:

1.定义一些方法,子类必须完全实现这个抽象中所有的方法

2.不能从抽象类创建对象,它的意义在于被扩展

3.抽象类通常具有抽象方法,方法中没有大括号

PHP抽象类应用重点:

1.抽象方法不必实现具体的功能,由子类来完成

2.在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义

3.抽象类的方法可以有参数,也可以为空

4.如果抽象方法有参数,那么子类的实现也必须有相同的参数个数

示例:

//作用:抽象类不实现具体方法,具体方法由子类完成。

//定义抽象类 abstract

abstract class A{

//abstract 定义抽象类的方法,这里没有花括号。子类必须实现这个抽象方法。

abstract public function say();

//抽象类可以有参数

abstract public function eat($argument);

//在抽象类中可以定义普通的方法。

public function run(){

echo '这是run方法';

}

}

class B extends A{

//子类必须实现父类的抽象方法,否则是致命的错误。

public function say(){

子类无法继承父类的构造方法?

子类不可以继承父类的构造方法,只可以调用父类的构造方法。子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。

一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。

为什么子类重写父类的方法的访问修饰符,不能低于父类的方法访问权限?

方法的重写必须满足以下要求(从方法的五要素来分析):

(1)要有继承;

(2)方法名,参数列表要相同;

(3)访问修饰符不能比父类窄;也就是说,父类的public方法在重写时,访问修饰符必须是public,因为public的范围最大,否则就不构成方法的重写,例如:对于父类protected的方法,在重写时可以用protected或public来修饰。

(4)抛出的异常不能比父类更宽泛;

(5)返回类型要比父类的小或相同。只有满足以上五个要求才符合方法的重写

到此,以上就是小编对于“php_父类的父类方法”的问题就介绍到这了,希望介绍关于“php_父类的父类方法”的【4】点解答对大家有用。

抱歉,评论功能暂时关闭!