面向对象之抽象类和接口

问题

很多类里面用很多方法你不断的在重复写。

  • 我不是可以重写一个类每个公共类我个实例化一个这个公共类,调用相同的方法就可以了
  • 抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤

比如人必须吃饭,约会一般要吃饭、看电影,但不一定表白

1、抽象类不能实例化

2、抽象类存在的目的是为了让子类继承

3、抽象类的定义和普通类的定义一样,只不过前面加了一个关键字abstract

4、抽象类里面一般都有抽象方法

抽象方法是用来让自子类实现的,而且子类必须实现,不实现就报错

5、抽象方法只能public或者protected

6、抽象方法如果有参数

抽象方法如果有参数,参数有默认值,那么实现该方法的时候参数和默认值也都要有

7、抽象类可以继承抽象类,子类在实现的时候所有的抽象方法都得实现

abstract class shopWriter{
  public function writer();
}
class XmlWriter extends shopWriter{
  public function writer(){
    ...实现具体的xml方法
  }
}
class jsonWriter extends shopWriter{
  public function writer(){
    ...实现具体的json方法
  }
}

二、接口

当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了

  • interface 接口
  • implement 实现

你女朋友的爸妈的愿望;有车有房有存款

  • 接口中的方法都是抽象方法,所以abstract可以省略
  • 接口中的方法必须public
  • 接口中只能规定方法,不能写属性
  • 一个类可以实现多个接口,中间用逗号
  • 一个类可以先继承父类,然后再实现接口
  • 接口可以继承接口,但是里面的方法都要实现
Interface IFather {  
    //public $iVar1="iVar1";        此处接口定义中不能包含成员变量  
    //public static $iVar2="iVar2"; 此处接口定义中不能包含静态变量  
    const iVar3="iVar3";  
    function iMeth1();  
}  
Class ISon implements IFather {  
    function iMeth1() {  
        echo "iMeth1...<br>";  
    }  
}  
$is=new ISon();  
echo IFather::iVar3;

 

接口和抽象类有什么区别

1、定义接口的关键字是interface ,抽象类的关键字是abstract
2、抽象类和接口都不能直接实例化。
3、接口中的方法都是抽象的,抽象类中可以有方法的实现(即非抽象方法)
4、接口和抽象类中都可以定义变量,但是接口中定义的必须是公共的、静态的、Final的,抽象类中的变量跟普通类中的没有区别。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6、接口是对一系列行为的抽象,而抽象类是对事物的抽象
7、抽象类可以包含静态方法,但是接口中不可以!
8、接口中的方法必须是public的,抽象类中的方法可以使public 和 protected的
9、一个类可以实现多个接口(implement),但只能继承一个抽象类(extends),所以一般来说,可以使用接口实现的尽量使用接口实现。

posted @ 2020-07-01 22:30  成文的博客  阅读(183)  评论(0编辑  收藏  举报