0605-类的继承、重写、parent、final

定义一个子类(man)

 1 //定义一个类
 2 class renlei{
 3     var $name = '王五';
 4     var $age =  '';
 5     var $sex = '';
 6     var $todo = '';
 7     function showInfo(){
 8         echo '姓名:'.$this->name.'<br>年龄:'.$this->age.'<br>性别:'.$this->sex.'<br>做了什么:'.$this->todo;
 9     }
10     function cself(){
11         return new self;
12     }
13 }
14 //定义一个继承于renlei类的类
15 class man extends renlei{
16     
17 }
18 //实例化一个man类下的对象
19 $wbl = new man();
20 $wbl->showInfo();

父类和子类的关系:

  1.子类继承父类的全部信息,同时可以扩展自己的特征信息;如果没有扩展,继承也就没有了意义

  2.父类(基类)  派生  子类(派生类)。

  3.单继承:一个父类可以有多个子类,但一个子类只能有一个直接父类(可以有多级父类--多级继承)。

类中成员的修饰符及作用范围:

范围

本类内

继承关系类内

类外

public

可以

可以

可以

protected

可以

可以

不可以

private

可以

不可以

不可以

关键字:parent(parent::类成员):

  parent通常用于在子类中调用父类的成员的时候使用,多数通常就是使用父类的“静态类”成员(因为parent代表的类,而非对象

重写:override

  定义:发生在继承里。将从父类继承下来的属性或方法重新“定义”

  方法的参数形式:应该跟父类的一致(构造方法除外,可以不一致)。

私有属性和私有方法的重写问题:私有属性和方法都不能覆盖,但其实子类可以定义跟父类私有的同名属性或方法。只是当作一个自身的新的属性或方法来看待而已。不过方法的参数必须一致。

关键词:final

  如果某个类不希望对其进行扩展,则可以将其声明为“最终类”。

    形式:final  class  类名{ 。。。。类定义。。。。}

  如果某个方法不希望被下级类覆盖,就可以对其生命为“最终方法”。

    形式:final  function  方法名(){。。。。方法定义。。。。}

构造方法析构方法在继承中的表现:

  1.子类中没有定义构造方法时,会自动调用父类的构造方法。因此实例化子类时,需按照父类的构造方法的形式进行(注意参数)。

  2.子类定义了自己的构造方法,则不会自动调用父类的构造方法,但可以手动调用:parent::__construct();

 1 //定义一个human类下的子类
 2 class man extends human{
 3     public $m1 = "" ;
 4     //手动调用父类的构造方法
 5     function __construct($name,$m1){
 6         parent::__construct($name);
 7         $this->m1 = $m1;
 8     }
 9 }
10 //实例化一个man类下的对象
11 $wbl = new man('xiaoming',18);
12 echo $wbl->name;
13 echo $wbl->m1;
原文地址:https://www.cnblogs.com/flypea93/p/9139945.html