抽象类、抽象方法以及接口
1.抽象类
<?php
//抽象类、抽象方法
//类中只要有抽象方法。就需要声明为抽象类
//抽象类定义 abstract
abstract class Rule{
public $name;
public $exp;
public function __construct($name = '',$exp=0){
$this->name =$name;
$this->exp =$exp;
}
//吃饭
public function chifan(){
echo '<br>我正在吃饭';
}
//打怪
abstract public function daguai();
//升级
abstract protected function shengji();
//只要类中有抽象方法 ,类就要声明为abstrat ,抽象方法不能被声明为私有 ,抽象方法没有方法体,不用写大括号。
}
//抽象类不可实例化、必须被扩展类继承之后完成 抽象类中定义的所有抽象方法后才能被实例化
class Role extends Rule{
public function __construct($name = 'xiaoA'){
parent::__construct($name);
}
//父级抽象类的具体方法应该可以直接使用
//实现抽象方法
public function daguai($boss= 9999,$skill= 1000){
while($boss>0){
$boss = $boss - $skill;
echo '<br>继续攻击<br>';
}
echo '<br>胜利<br>';
}
public function shengji($exp=10000,$level=1){
$up = $level + $exp/1000;
echo '<br>恭喜升到'.$up.'级<br>';
}
}
$A = new Role('littleA');
echo '当前玩家'. $A->name. '经验为' . $A->exp;
$A->chifan();
$A->daguai();
$A->shengji();
执行结果:
2.接口
<?php
//接口定义一种类的规定 方法必须是public
//interface
interface IPhone{
//接口中可以有方法和类常量,而方法不需要有方法体
//定义常量
const NAME = 'iphone';
const AI = 'siri';
public function call($number);
public function camera($SOC);
public function music();
}
//一个类来实现接口中定义的方法
class IphoneX implements IPhone{
public $screen;
public $charge;
public function call($number){
echo '用iPhoneX打电话给'.$number;
}
public function camera($SOC){
echo '用iPhoneX照相';
}
public function music(){
echo '用Airpods听音乐';
}
}
class Iphone8 implements IPhone{
public $screen;
public $charge;
public function call($number){
echo '用iPhone8打电话给'.$number;
}
public function camera($SOC){
echo '用iPhone8照相';
}
public function music(){
echo '用iPhone8听音乐';
}
}
$iphone8 = new Iphone8;
$iphoneX = new IphoneX;
echo $iphone8->music();
echo '<br>';
echo $iphoneX->music();
执行结果:
总结:学了抽象类,接口的定义。其中抽象方法不能为私有,必须能被子类访问,接口的方法必须是public。子类需要实现抽象类定义的全部方法才能被实例化。
手写: