抽象类图片.png

  1. <?php
  2. abstract class Shengwu
  3. {
  4. abstract public function jump();
  5. }
  6. //定义抽象类
  7. abstract class Person extends Shengwu
  8. {
  9. public $name;
  10. public function say()
  11. {
  12. echo '说出自己的名字';
  13. }
  14. abstract public function eat($name);
  15. }
  16. class Man extends Person
  17. {
  18. //继承了Person之后,这里面就有Person的对象和方法
  19. public function eat($name)
  20. {
  21. echo '今天早上我吃的面包,大家吃的什么';
  22. }
  23. public function jump()
  24. {
  25. echo '我能立定跳远2m';
  26. }
  27. }
  28. //1、抽象类不能实例化对象
  29. //$p=new Person();//报错Cannot instantiate abstract class Person
  30. //2、抽象类存在的目的是为了让子类继承(不是为了用来实例化对象的)
  31. //3、抽象类里面一般都要有抽象方法,抽象方法是用来让子类实现的,而且子类必须实现,不实现就报错
  32. //4、抽象方法只能是public或者protected
  33. //5、抽象方法如果有参数,参数有默认值,那么实现该方法的时候参数和默认值也都要有
  34. //6、抽象类可以继承抽象类,子类在实现的时候所有的抽象方法都得实现必有

抽象类用在哪呢?
可以用在数据库里面,数据库有多种,这些数据库在连接数据库的时候,都是不一样的,但是在查询语句的时候,我们的select、update等都是一样的,所以我们可以将他们公共的东西放到一块,写到一个父类,这个父类定义成抽象类,把这个抽象的父类写好之后,它不能实例化对象,因为仅仅存在一个抽象的父类是完成不了数据库的整个操作的,不同的东西各个子类自己实现。

接口(抽象的抽象类)

图片.png

  1. <?php
  2. /*
  3. abstract class Test{
  4. abstract function test1();
  5. abstract function test2();
  6. }
  7. //子类只要继承了Test类,test1和test2都要实现
  8. */
  9. interface Test
  10. {
  11. function demo();
  12. }
  13. interface Eat extends Test
  14. {
  15. function eatMianbao();//接口中只有函数的声明,没有函数的实现
  16. }
  17. interface Jump
  18. {
  19. function jump();
  20. }
  21. class Animal
  22. {
  23. }
  24. //先继承父类,再实现接口
  25. class Person extends Animal implements Eat,Jump//先继承Animal再实现接口
  26. {
  27. //写一个类让他实现这个接口
  28. function eatMianbao(){
  29. echo '我在吃面包';
  30. }
  31. //接口可以继承接口,但是里面的方法都要实现
  32. function demo()
  33. {
  34. }
  35. function jump
  36. {
  37. echo '我会跳';
  38. }
  39. }
  40. /*
  41. 1、接口中的方法都是抽象方法,所以abstract可以省略不写
  42. 2、接口中的方法必须是public
  43. 3、接口中只能规定方法,不能写属性,(接口中可以写常量)
  44. 4、一个类可以实现多个接口,中间用逗号隔开
  45. 5、一个类可以先继承父类,然后再实现接口
  46. 6、接口可以继承接口,但是里面的方法都要实现
  47. */

接口就是对外交互的窗口(联想USB接口)
开发的时候是面向接口开发