php怎么写重写?php方法重写介绍
七月 02, 2019 | views
Comments 0
方法的重写/方法的覆盖(override),当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法究竟如何写,可以让子类去覆盖这个方法,具体用法如下:
- <?php
- //抽象一个Animal类
- class Animal{
- public $name;
- protected $price;
- function cry(){
- echo "不知道动物怎么叫..";
- echo "
- ";
- } //phpfensi.com
- }
- class Dog extends Animal{
- //覆盖父类中的 cry()方法
- function cry(){
- echo "小狗汪汪叫..";
- echo "
- ";
- }
- }
- class Pig extends Animal{
- //覆盖父类中的 cry()方法
- function cry(){
- echo "小猪哼哼叫..";
- echo "
- ";
- }
- }
- //创建一个只狗
- $animal=new Animal();
- $animal->cry();
- $dog1=new Dog();
- $dog1->cry();
- $pig1=new Pig();
- $pig1->cry();
- ?>
关于方法重写细节讨论:
方法重写就是子类有一个方法,和父类的某个方法的名称、参数个数一样,那么我们就说子类的这个方法重写了父类的那个方法。
1.要实现重写,要求 子类的那个方法的名字和参数个数一摸一样,但是并不要求参数的名称一样.
2.如果子类要去调用父类的某个方法(public / protected) 则可以使用 parent::方法名(参数..) , 父类名::方法名(参数...)
3.在实现方法覆盖的时候,访问修饰符可以不一样,但是必须满足:子类的访问范围>=父类的访问范围
注意:当父类的函数为私有(private)类型时,不能覆盖,因为父类为私有该函数根本不能继承,代码如下:
多态体现在什么地方?
- class Animal{
- public function cry(){
- echo '动物叫唤..';
- }
- }
- class Cat extends Animal{
- public function cry(){
- echo "abc";
- }
- }
- $cat1=new Cat();
- $cat1->cry();
当子类没有覆盖父类的方法则 $cat1->cry() 调用的是父类,当 子类覆盖了父类的方法,则调用自己的cry()
zend