在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢?相关的知识,希望对你有一定的参考价值。
参考技术A1、如果父类和子类中都没有显式的定义__construct,在实例化子类对象时,只会隐含的调用子类自己的构造方法。
2、如果父类中有显式的构造方法__construct,而子类中没有定义__construct,在实例化子类对象时,就会调用父类中的构造方法。
3、如果父类和子类中都显式的定义了__construct,在实例化子类对象时,只会调用子类自己的构造方法(这就像是子类重构了父类的构造方法),而如果也想要调用父类的构造方法的话,就需要在子类的__construct 方法中显式的调用,(如 __construct() parent::_construct();)。
扩展资料
子类的构造函数名与子类名相同。
在子类里父类的构造函数不会自动执行。
要在子类里执行父类的构造函数,必须执行类似以下语句:
$this->[父类的构造函数名()]
类的构造函数统一命名为__construct()。
子类的构造函数名也是__construct()(也是废话)。
在子类里父类的构造函数会不会执行,分两种情况:
1、如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
2、如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:parent::__construct();
参考资料来源:
百度百科——继承
JAVA 继承
一、继承的基本语法:
在Java语言中,用extends关键字表示一个类继承了另一个类。
比如: 子类 extends 父类{
}
子类类到底继承了父类类的哪些东西呢?有 以下两种情况:
① 当子类类和父类类位于同一个包中:子类类继承父类类中public、Protected和默认访问级别的成员变量和成员方法
② 当子类类和父类类位于不同的包中:子类类继承父类类中public和protected访问级别的成员变量和成员方法
【在JAVA 中一个子类只能有一个直接的父类。】
所有的Java类都直接或间接地继承Java.lang.Object类。Object类是所有java类的祖先。
二、方法重载(OverLoad)
对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法
注:
重载方法必须满足以下条件:
① 方法名相同
② 方法的参数类型、个数、顺序至少有一项不相同
③ 方法的返回类型可以不相同
④ 方法的修饰符可以不相同
三、方法覆盖(Override)
覆盖方法必须满足多种约束:
① 子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致
② 子类方法不能缩小父类方法的访问权限
③ 子类方法不能抛出比父类方法更多的异常
④ 方法覆盖只存在于子类和父类之间,在同一个类中的方法只能被重载,不能被覆盖
⑤ 父类的静态方法不能被子类覆盖为非静态方法
⑥ 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法
⑦ 父类的非静态方法不能被子类覆盖为静态方法
⑧ 父类的私有方法不能被子类覆盖
⑨ 父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法 二是子类重新声明父类的抽象方法
⑩ 父类的非抽象方法可以覆盖为抽象方法
四、方法覆盖与方法重载的异同
相同点:
要求方法相同
都可以用于抽象方法和非抽象方法之间
不同点:
方法覆盖要求参数签名必须一致,而方法重载反之
方法覆盖要求返回类型必须一致,而方法重载不做限制
方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法
方法覆盖对方法的访问权限和抛出的异常有特殊要求,而方法重载无限制
父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次
五、super关键字
super和this关键字都可以用来覆盖java语言的默认作用域,使被屏蔽的方法或变量为可见。
注:
在程序中,在以下情况会使用super关键字:
①在类的构造方法中,通过super语句调用这个类的父类的构造方法
②在子类中访问父类的被屏蔽的方法和属性
六、继承的利弊和使用原则
利弊:
继承关系最大的弱点:打破封装
七、比较组合与继承
以上是关于在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢?的主要内容,如果未能解决你的问题,请参考以下文章