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();