Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:全部作业务必在6月10日前完成
继承: 父类的二类成员自动成为子类的成员
重写: 覆写与父类/基类同名的成员(属性, 方法)
扩展: 子类添加自身的方法来增加/扩展父类的功能
// 父类
class fatherclass{
// 常规类属性
public $father='父类常规属性值';
public $father1='准备被子类复写的父类常规属性';
// 静态类属性
public static $sfather='父类静态属性值';
// 常规类方法
public function fatherfun(){
// 返回常规属性
return '父类常规方法:'.__FUNCTION__;
}
// 准备被子类复写的常规类方法
public function fatherfun1(){
return '父类常规方法:'.__FUNCTION__;
}
// 静态类方法
public static function sfatherfun(){
return '父类静态方法:'.__FUNCTION__;
}
}
// 子类
class sonclass extends fatherclass{
// 1、继承功能:子类中可直接调用父类中的属性及方法
// 实例化子类后即可直接访问父类中的属性和方法
// 2、重写功能:子类中可对父类中的属性及方法进行重写
// 属性重写:
public $father1='被子类重写的父类属性值';
// 方法重写:
public function fatherfun1(){
return '被子类重写的方法:'.__FUNCTION__;
}
// 3、扩展功能:子类可对父类中的属性和方法进行扩展
// 属性扩展:
public $son='子类扩展的属性值';
// 方法扩展:
public function sonfun(){
return '子类扩展的方法:'.__FUNCTION__;
}
}
// 实例化子类
$sonclass=new sonclass;
// 直接访问父类常规属性
echo '直接访问父类常规属性:',$sonclass->father,'<hr>';
// 直接访问父类静态属性
echo '直接访问父类静态属性:',$sonclass::$sfather,'<hr>';
// 直接访问父类常规方法
echo '直接访问父类常规方法:',$sonclass->fatherfun(),'<hr>';
// 直接访问父类静态方法
echo '直接访问父类静态方法:',$sonclass::sfatherfun(),'<hr>';
// 访问子类改写父类的属性
echo '访问被子类改写的父类属性:',$sonclass->father1,'<hr>';
// 访问子类改写父类的方法
echo '访问被子类改写的父类方法:',$sonclass->fatherfun1(),'<hr>';
// 访问子类扩展的属性
echo '访问子类扩展的属性:',$sonclass->son,'<hr>';
// 访问子类扩展的方法
echo '访问子类扩展的方法:',$sonclass->sonfun(),'<hr>';
抽象类的作用:部分分离了设计与实现,将设计抽象化,待到实现时再具象化
// 设计(抽象类),用关键字abstract声明抽象类
abstract class absclass{
// 抽象属性
protected $absname;
// 抽象方法
abstract protected function absfun();
}
// 实现(工作类),用关键字extends继承
class jobclass extends absclass{
// 抽象属性的实现:给属性赋值
public $absname='被实现的属性值';
// 抽象方法的实现:写上方法体
public function absfun(){
return '被实现的抽象方法:'.__FUNCTION__;
}
}
// 实例化工作类
$jobclass=new jobclass;
// 访问工作类属性
echo '访问工作类属性:',$jobclass->absname,'<hr>';
// 访问工作类方法
echo '访问工作类方法:',$jobclass->absfun(),'<hr>';
接口: 完全分离了”设计与实现”
使用关键字: interface 来声明接口
使用与类相似的语法: 抽象方法, 常量, 构造方法(魔术方法的一种)
默认访问控制必须是public
接口允许多继承, 从而间接实现了PHP的多继承
// 设计(接口):完全分离了设计与实现,interface
interface iface{
// 接口常量:用关键字const声明
const MY='接口常量值';
// 接口方法
public function ifun();
}
// 实现(工作类),用关键字implements继承接口
class job implements iface{
public $myname='工作类属性值';
public function ifun(){
return '工作类中实现的接口方法:'.__FUNCTION__;
}
}
// 实例化工作类
$job=new job;
// 访问接口常量
echo '访问接口常量:',iface::MY,'<hr>';
// 访问工作类中的属性
echo '访问工作类中的属性:',$job->myname,'<hr>';
// 访问在工作类中实现的接口方法
echo '访问在工作类中实现的接口方法:',$job->ifun(),'<hr>';