楼主看看,这个贴子。http://community.csdn.net/Expert/topic/3241/3241817.xml?temp=.7995264

解决方案 »

  1.   

    faq里有精华帖,楼主搜索一下看看
      

  2.   

    has a
    is  a主要就看上面这两种了.
    interface还有其他妙用,例如Serializable接口,仅仅是告诉使用者这个是一个可序列化的对象(instanceof Serializable),因为interface Serializable里面根本什么都没有!还有就是jdk library里面,
    在collections或者listener的实现里面
    一般都是规定一个interface
    然后再帮你实现一个利用此interface的abstract类(实现大部分固定的代码)
      

  3.   

    抽象类,实现面向对象设计的一个最核心的原则OCP;
    接口可以实现多重继承
      

  4.   

    interface可以实现多重继承如class abc implements a,b { ....}
    并且所有定义的方法都不能有实现的内容
    abstract类可以定义非抽象方法
    另外实现接口的实例,必须实现所有的方法
      

  5.   

    理解他们的用途很重要,接口一般是定义用户可以进行的操作,或是程序员必须实现的操作,这些概念我认为使用"契约"比较好理解,即你要成为什么什么东西,那么你必须实现这些方法,实现了这些方法以后,我才认为你是什么什么东西,这就是一种契约.但是抽象类不一样,他的用途以及概念最主要是在"现在我真的不知道这个东西应该怎么作了(指某个操作),但是我还是知道一点应该怎么做的(已经实现的方法),我还是留给后人来完成吧",即他的主要目的不是为了完成某种契约,而是不知道现在他能怎么办,所以就只好推给后面的了.
    使用CORBA可以理解,CORBA定义的就是一个接口:"要完成这些通信,那么你们必须完成这些操作",而Servlet里面的servlet就是典型的抽象类概念(虽然他不是),"虽然我知道HTTP客户传来来的是get操作,那么我就执行doGet方法,但是我现在真的不知道你要doGet方法要作么东西呀,所以还是后人来继续完成我的工作吧",当然抽象也有一种契约,就是"^_^,你要成为我的后人,行,帮我完成我没有完成的工作吧!什么,你也不能,那好,我不管,你可以交给你的后人完成,但是我只认你",这就是抽象中的契约!