Blogger Information
Blog 36
fans 0
comment 0
visits 28232
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
面向对象——继承、抽象类、接口
phpcn_u202398
Original
780 people have browsed it

1、继承的三大功能

1.1、继承

  • 继承需要使用关键字extends

注意

  • 继承时子类不能访问父类的私有属性
代码示例
  1. <?php
  2. class User{
  3. public $name = "小明";
  4. public $age = "35";
  5. public $email = "123@qq.com";
  6. public function one(){
  7. return "姓名:$this->name<br>年龄:$this->age<br>";
  8. }
  9. public function two(){
  10. return "$this->name". "的邮箱:". $this->email."<br>";
  11. }
  12. }
  13. $user = New User();
  14. echo $user->one();
  15. echo $user->two();
  16. echo "<hr>";
  17. //继承
  18. class Infor extends User{
  19. }
  20. $infor = New Infor();
  21. echo $infor->name ."今年".$infor->age."<br>";
  22. echo $infor->name ."的邮箱是".$infor->email."<br>";
  23. echo $infor->two();
  24. ?>

1.2、重写

  • 重写与父类同名的(属性, 方法)
    代码示例
  1. <?php
  2. class User{
  3. public $name = "小明";
  4. public $age = "35";
  5. private $email = "123@qq.com";
  6. public function one(){
  7. return "姓名:$this->name<br>年龄:$this->age<br>";
  8. }
  9. public function two(){
  10. return "$this->name". "的邮箱:". $this->email."<br>";
  11. }
  12. }
  13. $user = New User();
  14. echo $user->one();
  15. echo $user->two();
  16. echo "<hr>";
  17. //继承
  18. class Infor extends User{
  19. //属性重写
  20. public $age = "23";
  21. //方法重写
  22. public function one(){
  23. return parent::one()."我还很年轻噢";
  24. }
  25. }
  26. $infor = New Infor();
  27. echo $infor->name ."今年".$infor->age."<br>";
  28. echo $infor->name ."的邮箱是".$infor->email."<br>";
  29. echo $infor->one();
  30. ?>

1.2、扩展

  • 扩展子类的方法来扩展父类
代码示例
  1. <?php
  2. class User{
  3. public $name = "小明";
  4. public $age = "35";
  5. private $email = "123@qq.com";
  6. public function one(){
  7. return "姓名:$this->name<br>年龄:$this->age<br>";
  8. }
  9. public function two(){
  10. return "$this->name". "的邮箱:". $this->email."<br>";
  11. }
  12. }
  13. $user = New User();
  14. echo $user->one();
  15. echo $user->two();
  16. echo "<hr>";
  17. //继承
  18. class Infor extends User{
  19. //属性扩展
  20. public $like ="打篮球,踢足球";
  21. //重写
  22. public function one(){
  23. return parent::one()."我还很年轻噢";
  24. }
  25. //方法扩展
  26. public function three(){
  27. return "姓名:$this->name<br>年龄:$this->age<br>爱好:$this->like";
  28. }
  29. }
  30. $infor = New Infor();
  31. echo $infor->name ."今年".$infor->age."<br>";
  32. echo $infor->name ."的邮箱是".$infor->email."<br>";
  33. echo $infor->one();
  34. echo $infor->three();
  35. ?>

2、抽象类

  • 定义为抽象的类不能被实例化

  • 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的

  • 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现

  • 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法

    代码示例
  1. <?php
  2. //抽象类
  3. abstract class User{
  4. protected $name = "小明";
  5. public $age = "35";
  6. protected $email = "123@qq.com";
  7. protected function one(){
  8. return "姓名:$this->name<br>年龄:$this->age<br>";
  9. }
  10. //抽象方法
  11. abstract protected function two();
  12. }
  13. abstract class Infor extends User{
  14. protected $school="清华大学";
  15. protected function two(){
  16. return "姓名:$this->name<br>年龄:$this->age<br>就读于:$this->school";
  17. }
  18. }
  19. //最终实现类
  20. class Inf extends Infor{
  21. public function two(){
  22. return parent::two();
  23. }
  24. }
  25. $infor = New Inf();
  26. echo $infor->two();
  27. ?>

3、接口

  • 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容

  • 接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的

  • 接口中定义的所有方法都必须是公有,这是接口的特性

  • 要实现一个接口,使用 implements 操作符

  • 类中必须实现接口中定义的所有方法,否则会报一个致命错误

  • 类可以实现多个接口,用逗号来分隔多个接口的名称

注意

  • 实现多个接口时,接口中的方法不能有重名
  • 接口也可以继承,通过使用 extends 操作符
  • 类要实现接口,必须使用和接口中所定义的方法完全一致的方式,否则会导致致命错误

    代码示例
  1. <?php
  2. //抽象类
  3. interface iUser{
  4. //接口常量
  5. const school="清华大学";
  6. //接口方法
  7. public static function two();
  8. }
  9. //实现接口
  10. class Infor implements iUser{
  11. protected static $name="翠花";
  12. public static function two(){
  13. return self::$name."就读与".iUser::school;
  14. }
  15. }
  16. echo Infor::two();
  17. ?>

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