博客列表 >继承、抽象类和接口

继承、抽象类和接口

赵大叔
赵大叔原创
2020年04月30日 09:21:03738浏览

1、继承的三大功能

  • class ‘子类名’ extends ‘父类名’
STT 操作 描述
1 继承 父类的二类成员自动成为子类的成员
2 重写 覆写与父类/基类同名的成员(属性, 方法)
3 扩展 子类添加自身的方法来增加/扩展父类的功能

演示代码:

  1. <?php
  2. // 类的继承的三个功能
  3. class Actor
  4. {
  5. protected $name = '吴邪';
  6. protected $age = 28;
  7. private $salary = 19999;
  8. protected static $nationality = '中国/CHINA';
  9. public function resume()
  10. {
  11. return "姓名: {$this->name} , 年龄: {$this->age}, 工资: {$this->salary}";
  12. }
  13. }
  14. // 类的继承的三个功能
  15. // 继承
  16. class Lending1 extends Actor {
  17. // 现在该子类中什么内容也没有,可以访问父类中的成员
  18. }
  19. // 重写和扩展
  20. class Lending2 extends Actor
  21. {
  22. // 1. 重写
  23. // 属性重写
  24. protected $age = 35;
  25. // 方法重写, 方法级的多态
  26. public function resume()
  27. {
  28. // 在子类中可以引用父类成员
  29. // parent::write()
  30. return parent::resume() . ', 是盗墓笔记的主角之一!';
  31. }
  32. // 2. 扩展
  33. // 属性扩展
  34. protected $profession = '盗墓贼';
  35. // 方法扩展
  36. public function resume1()
  37. {
  38. // return "$this->salary}"; 不能访问
  39. return parent::resume() . ", 职业: {$this->profession}";
  40. }
  41. }
  42. // 客户端
  43. $lending1 = new Lending1;
  44. // 访问的是父类中的成员(private也能访问)
  45. echo $lending1->resume() . '<br>';
  46. $lending2 = new Lending2;
  47. echo $lending2->resume() . '<br>';
  48. echo $lending2->resume1() . '<br>';

演示效果展示:

2、抽象类的作用与实现 abstract抽象类关键字

只要一个类中有一个抽象方法, 那么这个类就是:抽象类
抽象类的作用: 部分分离了” 设计(抽象类中完成)与实现(工作类中完成)

演示代码:

  1. <?php
  2. // 类的继承的三个功能
  3. abstract class Actor
  4. {
  5. protected $name = '吴邪';
  6. protected $age = 28;
  7. private $salary = 19999;
  8. protected static $nationality = '中国/CHINA';
  9. // 具体方法:有方法体: {...},
  10. public function resume()
  11. {
  12. return "姓名: {$this->name} , 年龄: {$this->age}, 工资: {$this->salary}";
  13. }
  14. // 抽象方法:没有方法体
  15. abstract protected function resume1();
  16. }
  17. // 工作类也可是一个抽象类,继承后才能调用
  18. abstract class Lending1 extends Actor
  19. {
  20. protected $profession = '盗墓贼';
  21. // 方法扩展
  22. public function resume1()
  23. {
  24. // return "$this->salary}"; 不能访问
  25. return parent::resume() . ", 职业: {$this->profession}";
  26. }
  27. }
  28. class Work extends Lending1 {
  29. }
  30. // 客户端
  31. $work = new Work;
  32. echo $work->resume1() . '<br>';

演示效果展示:

3、接口基本语法

关键字: interface
语法和类相似: 抽象方法, 常量, 构造方法
所的方法都是抽象方法
访问控制必须是public
接口: 完全分离了” 设计(抽象类中完成)与实现(工作类中完成)
接口实现关键字:implements

演示代码:

  1. <?php
  2. // 接口使用场景1: 单接口
  3. interface iActor
  4. {
  5. // 接口常量
  6. const NATION = '中国';
  7. // 接口方法: 都是抽象方法
  8. public function resume();
  9. }
  10. // 工作类实现接口
  11. class Lending implements iActor
  12. {
  13. protected $name = '张小哥';
  14. // 接口中的抽象方法,必须在工作类实现
  15. public function resume()
  16. {
  17. return $this->name . ' 的国籍是: ' . iActor::NATION;
  18. }
  19. }
  20. // 客户端
  21. $lending = new Lending;
  22. echo $lending->resume();

演示效果展示:

总结

初步理解继承、抽象类、接口的基础知识和简单的用法,当然离完全掌握还差很远,书读百遍,其义自现,想要真正的掌握还要多读多写。

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