2、什么是父类、子类
在Class类中,我们可以实现类似于生孩子这样的特性。
例如下图:
Class中的父子类关系生成主要分成三种模式:
1、继承2、接口3、抽象
每一种模式之间,都有各自不同的要求和特点,我们在下面的课件中会对其进行一一讲解。
3、类的继承
继承是面向对象程序设计中最常用的一个特性,
假设案例中的汽车是一个比较大的类,我们也可以称之为基类或父类,
除此之外,汽车还分为卡车、轿车、SUV、越野车等,
因为这些子类具有很多相同的属性和方法,可以采用继承汽车类来共享这些属性与方法,实现代码的复用性,同时也方便程序管理和升级。
PHP 使用 extends 关键字来继承一个类,,其语法格式如下:
class 本类名(子类) extends 继承的类名(父类) {}
下面,我们使用魔兽争霸3的游戏兵种,来进行一个Class继承的学习:
1、假设兵种是一个大类(父类)2、那么所有兵种同有的属性肯定有:血量、攻击力、防御值。3、所有兵种同有的方法肯定有:发起攻击4、子类的工作应该是生产不同的兵种。
那么则可以使用继承的特性,编写以下代码:
<?php# 我是基类,定义一个兵种模糊的概念class Arms {protected $Name; // 兵种名称protected $HP; // 血量protected $AD; // 攻击力protected $MD; // 防御力# 调用这个方法攻击public function Battle() {$this->HP = $this->HP - $this->AD;echo $this->Name.'受到攻击剩余血量为:'.$this->HP.'<br/>';}}# 我是子类,实体化一个步兵兵种class Infantry extends Arms {# 初始化兵种属性public function __construct() {# 修改父类定义的成员属性$this->Name = '步兵'; // 兵种名称$this->HP = 120; // 血量$this->AD = 2; // 攻击力$this->MD = 5; // 防御力}}# 我是子类,实体化一个远程兵种class Remote extends Arms {# 初始化兵种属性public function __construct() {# 修改父类定义的成员属性$this->Name = '远程兵'; // 兵种名称$this->HP = 80; // 血量$this->AD = 10; // 攻击力$this->MD = 1; // 防御力}}# 生产出一个步兵$Infantry = new Infantry();$Infantry->Battle();# 生产出一个远程兵$Infantry = new Remote();$Infantry->Battle();
