论坛首页 入门技术论坛

抽象类 接口 复习

浏览 3397 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-12   最后修改:2010-04-13
通过网上收集和自己总结的:
  • java中只可以继承一个类却可以继承多个接口。一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性, 所以抽象类作为类型定义工具的效能大打折扣(只能是定义为一种类型,可以结合接口使用)。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接 口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

  • 抽象类可以提供一些方法的实现。Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供一些方法的实现,而Java接口不可以,这大概就是 Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java 接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这 显然是Java接口的缺点。

  • abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,体现的是继承的关系;interface表示的是"like-a"关系,体现的是一种契约关系,并不要求interface的实现者和interface定义在概念本质上是一致的。


综合以上几点:
抽象类:只可以继承一个抽象类,却可以提供一些方法的实现,体现的是继承关系。
接口:可以继承多个接口,却不能提供方法的实现,体现的是契约关系。
我们定义抽象类型的时候可以使用抽象类,定义一些次要行为时就可以使用接口。



AlarmDoor是一种(is-a)Door类型,拥有(like-a)Alarm提供的行为。
再举几个例子:
public class Cellphone extends Phone implements Bluetooth{   
}

public  class  电视机 extends 电器 implements 遥控器{
 }


再看一下Collection接口,AbstractCollection定义为一个抽象类,继承了Collection接口,把接口中的size()和iterator()抽象化,其他方法实现。因此当一个具体的实现类继承AbstractCollection抽象类时只需实现size()和iterator()的具体实现就可以了。而不用每个方法都实现一次。
  • 大小: 7.8 KB
   发表时间:2010-04-14  
帖子说的不错 再接再厉不过要保证正确性 要是误导了谁就不好了
0 请登录后投票
   发表时间:2010-04-14   最后修改:2010-04-14
我觉得各有各的优势 抽象类用得好好处是很明显的
比如给人行发报文因为有很多业务报文组装报文时 用一个抽象类就很好 用接口就比较麻烦了(因为不知道是那种报文掉接口不好确定) 抽象类把行为定义在那里 调抽象方法让子类实现就很好  我很喜欢
愚见....
0 请登录后投票
   发表时间:2010-04-15  
本人有点不同的看法:
Interface的作用是:
定义界面, 或者你说的契约。它不管你是如何实现的。不管谁拿到了实现这个Interface的 具体实现类,那么就可以按照自己定义的契约去使用了。
这样,无论具体实现类如何改变,使用这个Interface的调用者, 都不需要变化。

既然是契约, 怎么能随随便便就改呢?  所以这不是Interface的缺点, 而是他的作用所在。

好比 JDBC 实际就应该是一大堆Interface, 你使用JDBC的时候, 不用管这个JDBC的实现是 ORACLE的, MYSQL的, 还是MSSQL的。  要是JDBC的接口整天变,那ORACLE, MYSQL, MSSQL 还不得疯了?


abstract class的目的是 实现,它的目的是把子类里面共同的东西集中到一起来实现, 这样 子类里面本来重复的东西不见了。

关于多重继承, 你想一想,既然abstract class是一个实现, 那么如果可以继承多个class,而每个父类里都有一个实现,那就很难弄清楚那个才是真正的实现了。 单继承, 正是java 比C++ 简单的一个重要原因, 甚至可以说是java的优势。

愚见, 不足之处还请拍砖。



0 请登录后投票
   发表时间:2010-04-15  
个人认为接口就是一个规定
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics