• PHP的抽象类和抽象方法以及接口总结


    PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下:

    • 抽象类:
      1、如果一个类中有一个方法是抽象方法,则这个类就是抽象类;
      2、抽象类必须加上abstract关键字修饰;
    • 抽象方法:
      定义:一个方法如果没有方法体,则这个方法就是抽象方法
      1、一个方法没有方法体,直接用分号结束的方法;
      2、如果是抽象方法,必须使用abstract抽象关键字形容

    注意:1、只要有abstract修饰的类就是抽象类

          2、除了在抽象类中可以有抽象方法之外,和正常的类完全一样

       3、抽象类不能实例化对象

       4、如果有抽象类,就必须有这个类的子类,并且在子类中写方法覆盖抽象类中的抽象方法(加上方法体)

       5、子类必须全部重写父类中的抽象方法,这个子类才能被实例化,如果只是实现部分,那么这个子类还是抽象类

    抽象类的作用:就是严格要求子类的结构,所以抽象类其实就是一个规范

    抽象方法的作用:就是规定子类必须有这个方法,且将功能交给子类来处理,只写出来方法的结构,而没有实现(无方法体),具体的功能实现交给具体的子类根据自己的需求实现

     1 /**
     2 * 抽象类
     3 *
     4 */
     5 abstract class Person
     6 {
     7     public $name;
     8     public $age;
     9 
    10     //抽象方法
    11     abstract function say();
    12 
    13     abstract function eat();
    14 
    15     function run()
    16     {
    17         echo "hello world";
    18     }
    19 
    20     function sleep()
    21     {
    22         echo "test";
    23     }
    24 }
     1 /**
     2 * 抽象类的子类
     3 *
     4 */
     5 class StudentCn extends Person
     6 {
     7     function say()
     8     {
     9         echo "我说中文<br>";
    10     }
    11 
    12     function eat()
    13     {
    14         echo "我用筷子吃饭";
    15     }
    16 }

    接口:接口是一种特殊的抽象类

    1、抽象类和接口都有抽象方法

    2、抽象类和接口都不能实例化

    3、抽象类和接口的使用意义(即作用)相同

    比较:a、接口中的方法,必须全部是抽象方法,所以接口中的抽象方法不需要使用abstract关键字,直接用分号结束即可

       b、接口中的成员属性,必须是常量(不能有变量)

       c、所有的方法必须全部是public

       d、声明接口不适用class,而是使用interface

    Tips:1、可以使用extends让一个接口继承另一个接口,即常用的继承(扩展新抽象方法),无覆盖的关系

       2、可以使用一个类来实现接口中全部方法,也可以使用一个抽象类,来实现接口中的部分方法

       3、不要使用extends这个关键字,使用implements实现implements相当于extends

       4、一个类可以在继承另一个类的同时,使用implements实现一个接口,也可以实现多个接口(一定要先继承,再实现接口)

     1 /**
     2 * 接口
     3 */
     4 interface Demo
     5 {
     6     const Name = "妹子";
     7     const Age = 10;
     8 
     9     function test();
    10 
    11     function test2();
    12 }
    13 echo Demo::Name;//访问常量
    14 
    15 /**
    16 * 接口继承接口,用于扩展接口
    17 */
    18 interface Test extends Demo
    19 {
    20     function test4();
    21 }
    22 
    23 /**
    24 * 普通类
    25 */
    26 class world
    27 {
    28     function test5()
    29     {
    30     }
    31 }
    32 
    33 
    34 /**
    35 * 继承+接口
    36 */
    37 class Hello extends World implements Test
    38 {
    39 
    40     function test()
    41     {
    42     }
    43 
    44     function test2()
    45     {
    46     }
    47 
    48     function test3()
    49     {
    50     }
    51 
    52     function test4()
    53     {
    54     }
    55 
    56     function test5()
    57     {
    58     }
    59 
    60 }
  • 相关阅读:
    获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary
    获取所有员工当前的manager,如果当前的manager是自己的话结果不显示
    String笔记02
    String笔记
    ArrayList笔记
    猜数字小游戏
    标准类
    封装
    面向对象
    方法
  • 原文地址:https://www.cnblogs.com/Steven-shi/p/8603511.html
Copyright © 2020-2023  润新知