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

类的继承、抽象、和接口的实例

若是梦终会醒
若是梦终会醒原创
2020年05月04日 15:05:261124浏览

类的继承、抽象、和接口的实例

1 类的继承示例

类继承的三大特性 1继承 2重写 3扩展

  1. <?php
  2. //类继承的三大特性 继承 重写 扩展
  3. //父类 猫科动物
  4. class CatType
  5. {
  6. private $eat='我们都是吃肉的';
  7. protected $eat1='我们经常吃肉';
  8. private $eat2='我们经常吃肉';
  9. protected $test='测试';
  10. function eat() //食物方法
  11. {
  12. echo '食物: ',$this->eat,'<br>';
  13. echo '经常吃: ',$this->eat1,'<br>';
  14. echo '经常不吃: ',$this->eat2,'<br>';
  15. }
  16. public function info() //信息方法
  17. {
  18. echo '动物类型: 猫科动物 ','<br>';
  19. }
  20. }
  21. //子类 老虎
  22. class Tiger extends CatType
  23. {
  24. /*属性扩展
  25. *
  26. * */
  27. private $name='老虎';
  28. private $sex='母';
  29. private $age='2';
  30. public $eat='我们吃素的'; //因为是私有的无法重写
  31. public $eat1='我们经常不吃素的'; //重写属性 重写属性必须大于等于 父类访问修饰的范围
  32. public function info() //重写信息方法
  33. {
  34. parent::info(); //调用父类信息方法
  35. echo '动物名:',$this ->name,'<br>';
  36. echo '性别: ',$this ->sex,'<br>';
  37. echo '年龄: ',$this ->age,'<br>';
  38. $this ->eat(); //调用继承下来的父类食物方法
  39. echo '测试 private: ',$this ->eat2,'<br>'; //报错父类private修饰的属性无法被访问
  40. echo '测试 protected: ',$this ->test,'<br>';//测试能否访问 protected修饰的属性
  41. }
  42. }
  43. $cat = new Tiger(); //实例化
  44. $cat->info();

效果图:

2 类的抽象示例

  1. <?php
  2. //抽象类
  3. abstract class Father {
  4. public abstract function setInfo($data); //抽象方法
  5. public function getInfo($data) {
  6. echo '获取信息<br>';
  7. foreach ($data as $value):
  8. echo $value,'<br>';
  9. endforeach;
  10. }
  11. }
  12. //继承
  13. class Sons extends Father
  14. {
  15. //重写实现父类的抽象方法
  16. public function setInfo($data) {
  17. echo '重新实现父类的抽象方法<br>';
  18. foreach ($data as $key=>$value):
  19. echo $key.'&emsp;'.$value,'<br>';
  20. endforeach;
  21. }
  22. }
  23. $data=['id'=>1,'name'=>'张三','age'=>20,'hobby'=>'编程'];
  24. //测试
  25. $stu=new Sons();
  26. $stu->setInfo($data); //重新实现父类的抽象方法
  27. echo '<hr>';
  28. $stu->getInfo($data); //获取信息

效果图:

3 类的接口示例

  1. <?php
  2. //声明接口
  3. interface IFather
  4. {
  5. const MAP = '地球';
  6. function fun1();
  7. function fun2();
  8. }
  9. //接口实现
  10. class Sons implements IFather
  11. {
  12. private $nation = '中国';
  13. private $city = '贵州';
  14. public function fun1()
  15. {
  16. echo $this->nation, '<br>';
  17. }
  18. public function fun2()
  19. {
  20. echo $this->city, '<br>';
  21. }
  22. }
  23. //访问接口中的常量
  24. echo IFather::MAP,'<br>';
  25. (new Sons)->fun1();
  26. (new Sons)->fun2();

效果图:

3.1 接口的多重实现

类不允许多重继承,但是接口允许多重实现。

  1. <?php
  2. //声明接口
  3. interface IFather
  4. {
  5. const MAP = '地球';
  6. function fun1();
  7. }
  8. interface IFather2
  9. {
  10. function fun2();
  11. }
  12. //接口实现
  13. class Sons implements IFather,IFather2
  14. {
  15. private $nation = '中国';
  16. private $city = '贵州';
  17. public function fun1()
  18. {
  19. echo $this->nation, '<br>';
  20. }
  21. public function fun2()
  22. {
  23. echo $this->city, '<br>';
  24. }
  25. }
  26. //访问接口中的常量
  27. echo IFather::MAP,'<br>';
  28. (new Sons)->fun1();
  29. (new Sons)->fun2();

效果图和上面一个一样

4 总结:

4.1 继承

  1. 类的继承:子类可以继承所有父类中的属性和方法,但是父类中的private属性在子类中是不能被访问的

  2. 类的扩展:子类中除了使用父类的属性和方法,还可以添加自己的属性和方法

  3. 类的重写:父类中的属性和方法可以在子类中被重新定义

  4. 只有方法的声明没有方法的实现称为抽象方法

  5. 一个类中只要有一个方法是抽象方法,这个类必须是抽象类。
  6. 抽象类的特点是不能被实例化
  7. 子类继承了抽象类,就必须重新实现父类的所有的抽象方法,否则不允许实例化
  8. 类中没有抽象方法也可以声明成抽象类,用来阻止类的实例化

4.2 抽象(abstract)

  1. abstract修饰的方法是抽象方法,修饰的类是抽象类

  2. 只有方法的声明没有方法的实现称为抽象方法

  3. 一个类中只要有一个方法是抽象方法,这个类必须是抽象类。

  4. 抽象类的特点是不能被实例化

  5. 子类继承了抽象类,就必须重新实现父类的所有的抽象方法,否则不允许实例化

  6. 类中没有抽象方法也可以声明成抽象类,用来阻止类的实例化

4.3 接口(interface)

  1. 如果一个类中所有的方法是都是抽象方法,那么这个抽象类可以声明成接口
  2. 接口是一个特殊的抽象类,接口中只能有抽象方法和常量
  3. 接口中的抽象方法只能是public,可以省略,默认也是public的
  4. 通过implements关键字来实现接口
  5. 不能使用abstract和final来修饰接口中的抽象方法。

  6. 在接口的多重实现中,如果有同名的方法,只要实现一次即可

  7. 类可以继承的同时实现接口

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