博客列表 >PHP第14课-抽象类与接口-九期线上班

PHP第14课-抽象类与接口-九期线上班

Content っ
Content っ 原创
2019年12月03日 19:40:45522浏览

1.抽象类

  1. abstract: 定义抽象方法/抽象类
  2. 类中只要有一个抽象方法, 该类就应该声明为抽象类
  3. 抽象类只能被继承,不能实例化,并且抽象方法必须在子类实现
  4. 实现抽象方法的子类方法可见性不能低于抽象方法原定义
  5. 抽象方法是public, 子类方法只能是public
  6. 抽象方法是protected, 子类方法只能是protected/public
  1. <?php
  2. abstract class Person{
  3. //属性成员
  4. protected $name = null;
  5. //构造函数
  6. protected function __construct($name = 'Jason')
  7. {
  8. $this->name = $name;
  9. }
  10. //外部访问获取name
  11. public function getName(){
  12. return $this->name;
  13. }
  14. abstract protected function setName($name);
  15. }
  16. class Girl extends Person{
  17. public function __construct($name = 'Jason')
  18. {
  19. parent::__construct($name);
  20. }
  21. //必须实现抽象类函数
  22. function setName($name)
  23. {
  24. $this->name = $name;
  25. }
  26. }
  27. /********实例化对象*********/
  28. $girl = new Girl('Alice');
  29. echo '名字:'.$girl->getName() .'<hr>';
  30. $girl->setName('Maria');
  31. echo '更改后名字:'.$girl->getName() .'<hr>';

2.接口

  1. interface: 指定某个类必须实现的方法,但不需要定义方法的具体实现过程
  2. 接口中仅允许出现: 方法与类常量
  3. 接口的方法可见性必须是: public
  4. 接口的方法体必须是空的
  5. 接口是类的代码模板, 可以像类一样有父子继承关系,例如父接口, 子接口
  6. implements: 类实现接口的关键字, 读音: ['ɪmplɪmɛnts,应波罗曼次]
  7. 如果仅是部分实现接口中的方法, 请用一个抽象类来实现它
  1. <?php
  2. /****************************/
  3. /***********接口*************/
  4. /****************************/
  5. interface iVehicle{
  6. public function setFuel($fuel);
  7. public function setPurpose($purpose);
  8. }
  9. class Car implements iVehicle{
  10. public $fuel;
  11. public $purpose;
  12. public function setFuel($fuel)
  13. {
  14. $this->fuel = $fuel;
  15. }
  16. public function setPurpose($purpose)
  17. {
  18. $this->purpose = $purpose;
  19. }
  20. public function log(){
  21. return $this->fuel . $this->purpose . '车<hr>';
  22. }
  23. }
  24. class Auto implements iVehicle{
  25. public $fuel;
  26. public $purpose;
  27. //必须实现接口方法
  28. public function setFuel($fuel){
  29. $this->fuel = $fuel;
  30. }
  31. public function setPurpose($purpose){
  32. $this->purpose = $purpose;
  33. }
  34. public function log(){
  35. return $this->fuel . $this->purpose . '车 <hr>';
  36. }
  37. }
  38. /***********实例化接口*************/
  39. $car = new Car();
  40. $car->setFuel('新能源');
  41. $car->setPurpose('公交');
  42. echo $car->log();
  43. $car = new Auto();
  44. $car->setFuel('家用');
  45. $car->setPurpose('燃油');
  46. echo $car->log();
运行效果

手写代码


总结

  1. 在实际开发过程中, 通常并不会直接使用一个父类/超类,而是在父类中定义一些方法声明
  2. 并且确信这个方法肯定是会被子类重写的, 父类中没必要实现,只要给一个方法编写规范即可
  3. 这个规范包括方法的名称, 参数列表等,具体实现就完全交给子类去完成了
  4. 相当于公司的部门主管, 接受到老板的任务, 只把属于自己的部分做了, 其它部分, 设置一个标准交给下属去完成
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议