php怎么写重写?php方法重写介绍

七月 02, 2019 | views
Comments 0

方法的重写/方法的覆盖(override),当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法究竟如何写,可以让子类去覆盖这个方法,具体用法如下:

  1. <?php   
  2.   //抽象一个Animal类   
  3.         class Animal{   
  4.                public $name;   
  5.                protected $price;   
  6.                function cry(){   
  7.                       echo "不知道动物怎么叫..";   
  8.                       echo " 
  9. ";   
  10.                }  //phpfensi.com 
  11.         }   
  12.         class Dog extends Animal{   
  13.                //覆盖父类中的 cry()方法   
  14.                  function cry(){   
  15.                       echo "小狗汪汪叫..";   
  16.                       echo " 
  17. ";   
  18.                }   
  19.         }   
  20.         class Pig extends Animal{   
  21.                //覆盖父类中的 cry()方法 
  22.                function cry(){   
  23.                       echo "小猪哼哼叫..";   
  24.                       echo " 
  25. ";   
  26.                }   
  27.         }   
  28.         //创建一个只狗   
  29.         $animal=new Animal();   
  30.         $animal->cry();   
  31.         $dog1=new Dog();   
  32.         $dog1->cry();   
  33.         $pig1=new Pig();   
  34.         $pig1->cry();   
  35.  ?>  

关于方法重写细节讨论:

方法重写就是子类有一个方法,和父类的某个方法的名称、参数个数一样,那么我们就说子类的这个方法重写了父类的那个方法。

1.要实现重写,要求 子类的那个方法的名字和参数个数一摸一样,但是并不要求参数的名称一样.

2.如果子类要去调用父类的某个方法(public / protected) 则可以使用 parent::方法名(参数..) , 父类名::方法名(参数...)

3.在实现方法覆盖的时候,访问修饰符可以不一样,但是必须满足:子类的访问范围>=父类的访问范围

注意:当父类的函数为私有(private)类型时,不能覆盖,因为父类为私有该函数根本不能继承,代码如下:

多态体现在什么地方?

  1. class Animal{ 
  2.               public function cry(){ 
  3.                      echo '动物叫唤..'
  4.               } 
  5.        } 
  6.        class Cat extends Animal{ 
  7.               public  function cry(){ 
  8.                      echo "abc"
  9.               } 
  10.        } 
  11.        $cat1=new Cat(); 
  12.       $cat1->cry(); 

当子类没有覆盖父类的方法则 $cat1->cry() 调用的是父类,当 子类覆盖了父类的方法,则调用自己的cry()



zend