Blogger Information
Blog 31
fans 0
comment 0
visits 18243
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP第14课-抽象类与接口-九期线上班
Content っ
Original
523 people have browsed it

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. 相当于公司的部门主管, 接受到老板的任务, 只把属于自己的部分做了, 其它部分, 设置一个标准交给下属去完成
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:总结的棒
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post