继承:extends
继承摆脱重复的代码,让功能得以扩展。
class Bus extends Car
Bus为派生类,子类,Car为基类,父类
继承-构造方法
子类继承父类时,子类没有构造方法,实例化子类对象时,会执行父类的构造方法。子类如果有自己的构造方法,实例化子类对象时,只会自动执行子类自己的构造方法。
当实例化子类的对象时,系统会自动执行父类的构造方法
在子类中主动调用父类的构造方法:使用 parent::__construct()
子类的构造方法没有参数,而我们实例化子类对象时传递了一个参数报错的原因是:在PHP中,调用函数或执行方法时,可以多传递参数,不可以少传递参数。多出来的参数在传递时是无效的,不会报错。
继承-protected
protected,只有在类内部以及继承类中使用,类外部不能使用。
多态-抽象类
抽象的关键字:abstract
多态:不同的对象对于同一行为表现出不同的形态。子类重写父类
抽象类:
抽象方法没有方法体
有抽象方法的类必须是抽象类
抽象类不能实现化,没有自己的对象
抽象类都是父类,它下面有子类
子类继承抽象类后,必须实现父类所有的抽象方法
子类重写父类的方法,这就是多态
继承抽象类需要注意:1,参数一致2,方法名相同3,子类方法的权限修饰符大于等于父类的权限修饰符
多态-覆盖
多态:不同的对象对于同一行为表现出不同的形态。
子类重写父类的方法,这就是多态。所谓覆盖,从本质上来说就是重写
要求:
1.当一个父类和子类有一个方法,参数和名字完全一致,那么子类方法会覆盖父类的方法。
2.在实行方法覆盖的时候,访问修饰符可以是不一样的,但是子类的权限修饰符必须大于等于父类的权限访问符。
3.要求参数和名字一样。并不是要求子类,父类名称相同。方法名字一致
这样很正常的可以输出“女人唱歌”。但当把woman里的sing()方法改为proctcted,父元素改成public()时,即将父类的访问权限设置的大于子类后,就会报错
所以需要注意的是子类的权限修饰符必须大于等于父类的权限访问符
父类已经存在 sing() 方法,但在子类中 又重新写了sing() 方法。这也是多态的表现。
<?php
class people{
protected function sing(){
echo "人唱歌";
}
}
class woman extends people{
public function sing(){
echo "女人唱歌";
}
}
$w=new woman();
$w->sing();