博客列表 >面向对象——继承、抽象类、接口

面向对象——继承、抽象类、接口

phpcn_u202398
phpcn_u202398原创
2020年04月29日 17:25:12781浏览

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、学习总结

本节课学习了继承的三大功能、抽象类、接口的知识。这些知识只是听说过,也不知道他们的使用方法。通过本节课的学习大体知道他们具体的知识点,知道如何去使用他们。需要在以后的学习和实践中强化他们,灵活应运。

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