php抽象类和接口的异同【转】

1. 相同点:

(1)      两者都是抽象类,都不能实例化。

(2)      interface 实现类及 abstract class 的子类都必须要实现已经声明的抽象方法。

2. 不同点:

(1)      interface 需要实现,要用 implements ,而 abstract class 需要继承,要用 extends 。

(2)      一个类可以实现多个 interface ,但一个类只能继承一个 abstract class 。

(3)      interface 强调特定功能的实现,而 abstract class 强调所属关系。

(4)      尽管 interface 实现类及 abstract class 的子类都必须要实现相应的抽象方法,但实现的形式不同。 interface 中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体 ) ,实现类必须要实现。而 abstract class 的子类可以有选择地实现。这个选择有两点含义: a) abstract class 中并非所有的方法都是抽象的,只有那些冠有 abstract 的方法才是抽象的,子类必须实现。那些没有 abstract 的方法,在 abstract class中必须定义方法体; b) abstract class 的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

(5)      abstract class 是 interface 与 class 的中介。 abstract class 在 interface 及 class 中起到了承上启下的作用。一方面, abstract class 是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

(6)      接口中的抽象方法前不用也不能加 abstract 关键字,默认隐式就是抽象方法,也不能加 final 关键字来防止抽象方法的继承。而抽象类中抽象方法前则必须加上 abstract 表示显示声明为抽象方法。

(7)      接口中的抽象方法默认是 public 的,也只能是 public 的,不能用 private , protected 修饰符修饰。而抽象类中的抽象方法则可以用 public ,protected 来修饰,但不能用 private 。

3. interface 的应用场合

(1)      类与类之间需要特定的接口进行协调,而不在乎其如何实现。

(2)      作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

(3)      需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。

(4)      需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

4. abstract class 的应用场合

一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:

(1)      定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用 abstract class 定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。

(2)      某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。 abstract 的中介作用可以很好地满足这一点。

(3)      规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特 定的功能 。

时间: 2024-08-09 10:32:17

php抽象类和接口的异同【转】的相关文章

抽象类与接口的异同

抽象类和接口是java中非常重要的两个概念,是java多态的基础,在java的设计模式中他们无处不在,为了归纳记忆,我们总结下抽象类和接口的相同和不同之处. 我们先说说他们各自的特点: 接口: 1.接口不是一个类,这点从声明就可以看出来声明关键字为interface 而类的声明是class,但是接口是一种抽象类型. 2.接口不能被实例化,因此接口中也不能有构造器. 3.接口中的方法默认是public abstract 类型的,且不能由其他private 等修饰符修饰. 4.接口中的方法如果不是s

抽象类和接口的异同

一.相同点 抽象类与接口都可以约束类的行为,是一些方法特征的集合,但是没有方法的实现.从这个角度来讲,接口可以看作一种特殊的"抽象类". 二.不同点 1.抽象类和接口采用完全不同的语法来表示,两者的设计理念也是不同的. 2.一个父类只能有一个直接父类,但可以通过implements实现多个接口. 3.抽象类利于代码复用,接口利于代码的扩展和维护. 4.对于继承抽象类的子类来说,符合is a 的关系,而对于实现接口的子类来说,符合has a 的关系.接口代表一种能力. 5.接口是公开的,

C#中抽象类和接口的异同

抽象类 通过在类定义前面放置关键字 abstract,可以将类声明为抽象类.抽象类不能实例化. 抽象类的用途是提供一个可供多个派生类共享的通用基类定义. 例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现. 抽象类可以包含非抽象的方法.属性以及抽象的方法.属性.抽象类和抽象方法都必须在派生类中用override进行重写. 抽象方法:抽象类也可以定义抽象方法. 方法是将关键字 abstract 添加到方法的返回类型的前面.抽象方法没有实

抽象类和接口的异同点

相同点: 都是不断向上抽取而来的. 不同点: 1,抽象类需要被继承,而且只能单继承.    接口需要被实现,而且可以多实现. 2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法.    接口中只能定义抽象方法,必须由子类去实现. 3,抽象类的继承,*是is a关系*,在定义该体系的基本共性内容.    接口的实现是 *like a 关系*,在定义体系额外功能. 举一个简单的例子: 犬按功能分:有导盲犬,搜爆犬. 1 abstract class 犬 2 { 3 abst

三、抽象类和接口的对比-----《大话设计模式》

一.抽象类 c#允许把类和方法声明为abstract,即抽象类和抽象方法.抽象类不能实例化,抽象方法必须被子类重写,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法. 抽象类拥有尽可能多的共同代码,尽可能少的数据. abstract class Animal //加abstract关键字,表明是抽象类 { -- protected abstract string getShoutSound(); //在方法返回值前加abstract表明此方法是抽象方法. -- //抽象

java基础知识回顾之抽象类和接口的区别

/* 抽象类和接口的异同点: 相同点: 都是不断向上抽取而来的. 不同点: 1,抽象类需要被继承,而且只能单继承. 接口需要被实现,而且可以多实现. 2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法. 接口中只能定义抽象方法,必须由子类去实现. 3,抽象类的继承,是is a关系,在定义该体系的基本共性内容. 接口的实现是 like a 关系,在定义体系额外功能. 犬按功能分:有导盲犬,搜爆犬. abstract class 犬 { abstract void 吼叫()

013_面向对象_抽象类和接口

1.抽象类(abstract) (1)特点 ①方法只有声明没有实现时,该方法就是抽象方法,抽象方法必须定义到抽象类中,该类也必须被abstract修饰 ②抽象类不可以被实例化,因为调用抽象方法没有意义. ③抽象类必须有子类覆盖所有的抽象方法,该子类才可以实例化,否则,这个子类还是抽象类 (2)常见问题 ①抽象类中有构造函数吗? 有,用来给子类对象初始化 ②抽象类可以不定义抽象方法吗? 可以.目的是不让该类创建对象,通常这个类中的方法有方法体,却没有内容 ③抽象关键字不可以和哪些关键字共存? pr

抽象类及接口详解

一.前言 在上一节中我们讲到抽象类和接口之间的异同,我们一起回顾下其异同. 同: 1.都不可以被实例化 2.都含有声明但未实现的方法 3.都可以被继承 4.其子类必须实现其声明未实现的方法 异: 1.抽象类是多继承,接口是单继承 2.抽象类可以包含实现的方法,接口不能包含实现的方法 3.接口支持回调,抽象类不支持 4.抽象类更多的定义在一些类关系紧密的类间,接口则定义在实现其某一种功能之间 抽象类和接口的异同我们再次熟悉了一遍,今天我们主要讲的是抽象类和接口使用场景及详讲抽象类的使用方法及接口的

java基础2:抽象类、接口与多态

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------