Blogger Information
Blog 9
fans 0
comment 0
visits 7977
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类的继承、抽象、和接口的实例
若是梦终会醒
Original
1125 people have browsed it

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

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. 类可以继承的同时实现接口

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