zoukankan      html  css  js  c++  java
  • PHP抽象类与接口的区别

    首先,看看什么是抽象类和接口

    抽象类:

    定义为抽象的类不能被实例化.任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。 这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的.

    接口:

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

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

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

    要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

    实现多个接口时,接口中的方法不能有重名。

    接口也可以继承,通过使用extends操作符.

    类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误.

    区别:

    1.对接口的继承使用implements,抽象类使用extends.

    2.接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量

    3.接口没有构造函数,抽象类可以有

    4.接口中的方法默认为public,抽象类中的方法可以用public,protected,private修饰

    5.一个类可以继承多个接口,但只能继承一个抽象类

  • 相关阅读:
    hdu 4027 Can you answer these queries? 线段树
    ZOJ1610 Count the Colors 线段树
    poj 2528 Mayor's posters 离散化 线段树
    hdu 1599 find the mincost route floyd求最小环
    POJ 2686 Traveling by Stagecoach 状压DP
    POJ 1990 MooFest 树状数组
    POJ 2955 Brackets 区间DP
    lightoj 1422 Halloween Costumes 区间DP
    模板 有源汇上下界最小流 loj117
    模板 有源汇上下界最大流 loj116
  • 原文地址:https://www.cnblogs.com/catcrazy/p/6289446.html
Copyright © 2011-2022 走看看