博客列表 >php学习:继承、抽象类与接口

php学习:继承、抽象类与接口

王小飞
王小飞原创
2020年04月29日 17:44:50723浏览

继承

  1. class User
  2. {
  3. //公开属性
  4. public $name = '王六';
  5. public $age = 16;
  6. //受保护属性
  7. protected $shi = '2001';
  8. //私有属性
  9. private $salary = 9999;
  10. //调用方法
  11. public function write()
  12. {
  13. return "姓名: {$this->name} , 年龄: {$this->age}, 出生时间: {$this->shi}, 工资: $this->salary";
  14. }
  15. }
  16. //子类 extends继承父类所有内容
  17. class Rob extends User
  18. {
  19. }
  20. /客户端调用子类
  21. $user = new User();
  22. echo $user->write() , '<br>';

重写父类属性

  1. class User2
  2. {
  3. //公开属性
  4. public $name = '王六';
  5. public $age = 16;
  6. //受保护属性
  7. protected $shi = '2001';
  8. //私有属性
  9. private $salary = 9999;
  10. //调用方法
  11. public function write()
  12. {
  13. return "姓名: {$this->name} , 年龄: {$this->age}, 出生时间: {$this->shi}, 工资: $this->salary";
  14. }
  15. }
  16. //子类 继承父类所有内容
  17. class Rob2 extends User2
  18. {
  19. //更新属性
  20. private $salary = 29999;
  21. public function write()
  22. {
  23. return "姓名: {$this->name} , 年龄: {$this->age}, 出生时间: {$this->shi}, 工资: $this->salary";
  24. }
  25. }
  26. // 客户端调用子类
  27. $user = new Rob2();
  28. echo $user->write() , '<br>';

扩展 在子类中增加方法

  1. class Rob3 extends User3
  2. {
  3. //更新属性
  4. private $salary = 29999;
  5. //
  6. public function write0()
  7. {
  8. // 在子类中可以引用父类成员
  9. // parent::write()
  10. return parent::write() . ', 喜欢玩游戏!';
  11. }
  12. }
  13. // 客户端调用子类
  14. $user = new Rob3();
  15. echo $user->write0() , '<br>';

抽象类

  1. abstract class User4
  2. {
  3. protected $name = '胡八一';
  4. protected $age = 40;
  5. // 具体方法: 有方法体: {...},
  6. protected function write1()
  7. {
  8. return "姓名: {$this->name} , 年龄: {$this->age}";
  9. }
  10. // 抽象方法:没有方法体
  11. // 只要一个类中有一个抽象方法, 那么这个类就是:抽象类
  12. abstract protected function write2();
  13. }
  14. // 实现类/工作类: 是一个可以被实例化的普通类
  15. // 工作类不一定是可以被实例化的普通类,也可是一个抽象类
  16. // 抽象类也可以被继承, 抽象类也可以用在继承的上下文环境中
  17. // 抽象类中允许有抽象成员, 但不是强制的,也可以没有
  18. abstract class Rob4 extends User4{
  19. protected $aihao = '喜欢玩游戏!';
  20. // 必须将抽象类中的抽象方法实现
  21. protected function write2() {
  22. return parent::write1() . ", 爱好: {$this->aihao}";
  23. }
  24. }
  25. // 最终工作类: 允许实例化
  26. class Work extends Rob4
  27. {
  28. public function write2()
  29. {
  30. return parent::write2();
  31. }
  32. }
  33. // 客户端
  34. $work = new Work();
  35. echo $work->write2();

接口:分离设计与实现

  1. // 接口使用场景1: 单接口
  2. interface iUser
  3. {
  4. // 接口常量
  5. const NATION = '男';
  6. // 接口方法
  7. public static function write();
  8. // 构造方法(略)
  9. }
  10. // 工作类实现接口
  11. class User implements iUser
  12. {
  13. protected static $name = '王六';
  14. // 接口中的抽象方法,必须在工作类实现
  15. public static function write()
  16. {
  17. return self::$name . ' 的性别是: ' . iUser::NATION;
  18. }
  19. }
  20. // 客户端
  21. // 接口常量的访问与类常量一样
  22. // echo iUser::NATION;
  23. echo User::write();

总结:子类自动继承父类所有的内容,可以在子类中更新。抽象类中没有方法,可以被继承不能实例。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议