博客列表 >类的继承与抽象类以及接口的学习

类的继承与抽象类以及接口的学习

我是郭富城
我是郭富城原创
2020年05月02日 23:45:09611浏览

类的继承与抽象类以及接口的学习

1 实例演示继承的三大功能

  • 类的继承也是类的扩展,扩展父类的功能
  • 子类有权访问父类的 public 和 protected
  • 功能:继承,重写,扩展

1.1 继承

  • 使用 extends 相当于复制了父类中的公共和受保护的属性和方法
  1. <?php
  2. //类继承
  3. class Nicola
  4. {
  5. public $name = '尼古拉';
  6. protected $sex = '男';
  7. private $money = '500万';
  8. public function write()
  9. {
  10. // 1.创建类实例
  11. $nicola = new Nicola;
  12. //2.访问类中的属性
  13. return "姓名: {$nicola->name}";
  14. }
  15. }
  16. class Son extends Nicola
  17. {
  18. //继承
  19. //父类的公共和受保护成员会自动成为子类的成员
  20. //使用extends相当于复制了父类中的公共和受保护的属性和方法
  21. public $name = '尼古拉';
  22. protected $sex = '男';
  23. public function write()
  24. {
  25. // 1.创建类实例
  26. $nicola = new Nicola;
  27. //2.访问类中的属性
  28. return "姓名: {$nicola->name}";
  29. }
  30. }

1.2 重写

  • 属性重写,重新赋值
  • 方法重写,实际上就是实现方法级的多态
  1. //重写
  2. // 重写与父类重名的属性
  3. protected $sex = '女';
  4. // 方法重写,实际上就是实现方法级的多态
  5. public function write()
  6. {
  7. // 1.创建类实例
  8. $nicola = new Nicola;
  9. // 在子类中可以引用父类的成员
  10. //2.访问类中的属性
  11. return "姓名: {$nicola->name},性别:{$nicola->sex},是一个大帅哥";
  12. }

1.3 扩展

  • 在父类基础上添加新的功能
  • 扩展新的属性
  • 扩展新的方法
  1. //扩展
  2. // 在父类基础上添加新的功能
  3. protected $profession = '搬砖工/Boss';
  4. public function write2()
  5. {
  6. return "职业: {$this->profession}";
  7. }

2. 实例演示抽象类的作用与实现

  • 抽象类,方法不能被实例化
  • 部分分离了设计(抽象类)与实现(工作类)
  • 抽象类也可以被继承,也可以用在继承上下文环境中
  • 抽象类允许有抽象成员,但不是强制的(例如保护当前这个类,不希望客户端直接实例化使用)

    实现类/工作类(不一定是普通类)
    工作类是一个可以被实例化的普通类,第一步就是实现抽象类的抽象方法

  1. <?php
  2. //抽象类
  3. //部分分离了设计(抽象类)与实现(工作类)
  4. abstract class Nicola
  5. {
  6. public $name = '尼古拉';
  7. protected $sex = '男';
  8. private $money = '500万';
  9. public function write()
  10. {
  11. return "姓名: {$this->name},性别:{$this->sex}";
  12. }
  13. //抽象方法:没有方法体
  14. abstract protected function write2();
  15. }
  16. //实现类/工作类(不一定是普通类)
  17. //工作累是一个可以被实例化的普通类
  18. //第一步就是实现抽象类的抽象方法
  19. //抽象类也可以被继承,也可以用在继承上下文环境中
  20. //抽象类允许有抽象成员,但不是强制的
  21. abstract class Son extends Nicola
  22. {
  23. protected $profession = '搬运工/boss';
  24. protected function write2()
  25. {
  26. return "{$this->profession}";
  27. }
  28. }
  29. class Sun extends Son
  30. {
  31. public function write2()
  32. {
  33. return "{$this->profession}";
  34. }
  35. }
  36. // 客户端
  37. //抽象方法不能被实例化
  38. // $son = new Son;
  39. // echo $son->write2();
  40. $sun = new Sun;
  41. echo $sun->write2();

3. 实例演示接口的基本语法

  • 接口:完全分离了设计与实现
  • 语法:interface
  • 实现接口的功能:implements
  • 默认访问控制或者是 public

    使用与类相似的语法:抽象方法,常量,构造方法(魔术方法的一种)

  1. <?php
  2. //接口:完全分离了设计与实现
  3. //语法:interface
  4. //使用与类相似的语法:抽象方法,常量,构造方法(魔术方法的一种)
  5. //默认访问控制或者是public
  6. //接口允许多继承,从而间接实现了php的多继承
  7. // 实现接口的功能:implements
  8. // 单接口
  9. interface iNicola
  10. {
  11. //接口常量
  12. const NATION = '中国梅州';
  13. //接口方法:默认就是抽象方法
  14. public static function write();
  15. // 构造方法
  16. }
  17. class Nicola implements iNicola
  18. {
  19. protected static $name = '尼古拉特斯拉';
  20. //接口中的抽象方法,必须在工作类中实现
  21. public static function write()
  22. {
  23. return self::$name . '家乡是:' . iNicola::NATION;
  24. }
  25. }
  26. echo iNicola::NATION;
  27. echo Nicola::write();

总结

本节课学习了类的继承和抽象类的作用和功能,介绍了接口的基本语法和功能。类的继承实际上就是功能上的扩展和延申,把基础的通用的内容作为一个基类/父类,扩展类/子类延申扩展新的需求和功能,就好像 html 的公共部分一样,css 的公共样式一样。
抽象类中的抽象方法并不能实例化,因此必须要有工作类/实现类继承并且实现抽象类中的抽象方法。
接口是一个实现 php 多继承的功能,间接的实现了 php 的多继承功能。

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