类的继承

简单理解:

某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息。

 

基本概念

 

继承:一个类从另一个已有的类获得其特性,称为继承。

 

派生:从一个已有的类产生一个新的类,称为派生。

 

继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情。

 

父类/子类:已有类为父类,新建类为子类。父类也叫“基类”,子类也叫“派生类”

 

单继承:一个类只能从一个上级类继承其特性信息。PHP和大多数面向对象的语言都是单继承模式。C++是多继承。

 

扩展:在子类中再来定义自己的一些新的特有的特性信息(属性,方法和常量)。没有扩展,继承也就没有意义了

 

访问(权限)修饰符

 

在类中的成员,通常都可以在前面加上以下3个修饰符:

 

public:公共的,共有的,公开的

 

protected:受保护的

 

private:私有的,

 

 

 

public公有的

 

用该修饰符修饰的成员,可以在“任何位置”使用(访问)。

 

访问(使用)是这样一个语法模式:

 

对象->成员;

 

类名::成员;

 

访问位置分为3个:

 

1:某个类内部:自然是该类的某个方法中

 

2:某个类的具有继承关系的子(父)类的内部:是指其他类的某个方法中。

 

3,某个类的外部:一般就是独立的代码区(不在类中),类似我们之前的代码。

 

代码演示如下:

 

 

 

 

 

protected 受保护的

 

protected修饰的成员,可以在当前类或当前类的上下级具有继承关系的类中访问。

 

private私有的

 

private 修饰的成员,只能在其所在的类中访问。

 

 

 

 

 

访问修饰限定符的总结:

 

范围

本类内

继承关系类内

类外

public

可以

可以

可以

protected

可以

可以

不可以

private

可以

不可以

不可以

 

 

 

parent代表父类

 

对比:self代表“本类”(自己当前类)

 

parent通常用于在子类中调用父类的成员的时候使用,多数通常就是使用父类的“静态类”成员。

 

——因为parent代表的类,而非对象。

 

以下为parent关键字的2常见用法:

 

 

 

 

 

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

 

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

 

 

 

修改为:

 

 

 

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

 

 

 

但通常,在子类,很多时候,在构造方法中,都应该(需要)去调用父类的构造方法以节省代码,增加可读性:

 

 

 

 

 

子类中没有定义析构方法时,会自动调用父类的析构方法。

 

子类定义了自己的析构方法,则不会自动调用父类的析构方法,但可以手动调用:parent::__destruct()