抽象类和接口

共同特点:
1、不能被实例化
2、 interface 实现类及 abstract class 的子类都必须要实现已经声明的抽象方法


不同点:
1、interface 需要实现 要用implements 而abstract需要继承要用extends
2、一个类可以实现多个interface 而一个类只能继承一个abstract class
3、interface强调特定功能的实现,而abstract强调所属关系
4、interface必须要实现所有的方法,而abstract可以有选择的实现(那些abstract方法是抽象的,子类必须实现,
    而那些没有abstract的方法可以选择实现,也可以留给子类来实现,而抽象方法可以选择实现也可以留给子类来实现但是
    此类必须声明为抽象类,抽象类不能被实例化)
5、abstract class 是 interface与 class的中介 abstract class 在 interface 以及class中起到承上启下的作用
   一方面abstract class 是抽象的可以声明抽象方法,以及规范子类必须实现的功能,另一方面他又可以定义缺省的方法体
   供子类直接使用或者覆盖,另外他还可以定义自己的实例变量供子类继承来使用
6、interface中的抽象方法钱不用也不能加 abstract 关键字,默认隐式的抽象方法,也不能用final关键字来防止继承方法体
   而抽象类中抽象方法钱必须加上abstract声明为抽象方法;
7、interface中的抽象方法默认都是public也只能是public不能使用private,protected修饰符修饰,而抽象类中的抽象方法可以
   使用public protected来修饰 但不能用private
abstract class应用场合
   在即需要统一接口又需要实例变量或者缺省的方法情况下就可以使用他
(1)      定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用 abstract class 定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
(2)      某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。 abstract 的中介作用可以很好地满足这一点。
(3)      规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特 定的功能 。
interface 的应用场合  
(1)      类与类之间需要特定的接口进行协调,而不在乎其如何实现。
(2)      作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
(3)      需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。

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


http://blog.csdn.net/sunlylorn/article/details/6124319

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值