IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    讨论java的接口和抽象类

    longhao (longtask@gmail.com)发表于 2008-03-10 20:13:12
    love 0
    在《Effective Java》一书中的第16条讲到:接口优于抽象类。个人感觉在开发的过程中对接口(Interface)和抽象类(Abstract class)的使用带有极大的随意性,两者甚至可以相互取代,不过在到底使用谁的细节上体现了个人的编程水平和设计能力,在此总结一下对这两种机制的理解。     二者最显著的区别在于:抽象类可以包含某些方法的实现,但是接口不允许。一个更为重要的不同之处在于,未来实现一个由抽象类定义的类型,它必须成为抽象类的一个子类。已有类很容易被更新以实现接口,但是在抽象类中增加新的功能的时候会导致所有的子类都拓展这个新的抽象类,而不管这个拓展是否对子类合适。基于这个特点,接口是定义mixin(混合类型:一个类除了实现它的primary type 外,还可以实现这个mixin类型,以表明可以提供选择的行为)的理想选择。     eg:一个新的房屋的对象,实现和老房子对比的功能,显而易见,用静态类是不可能的。
        public NewHome implements Comparable{
    public int compareTo(Object o){}
        }
        抽象类比接口有一个明显的优势:抽象类的演化比接口的演化要容易的多。如果在抽象类中增加一个公用的方法,你可以写的具体的实现方式,在所有的子类中都会默认的实现,你不用修改任何额外的代码,而接口不能办到。所以在设计接口的时候要特别的小心,在接口发布之前要找到尽可能多的程序员来实现这个接口以发现这个接口可能存在的问题,并且及时的修正这个问题。     eg:在所有的对数据库的基本操作的抽象类中添加一个delete的操作很简单,但是定义接口后实现就非常的复杂!


沪ICP备19023445号-2号
友情链接