用抽象类主要是注意继承关系,上下的联系
接口主要是注意实现但我找了一些例子
如现在要构建一个"发动机"的类
之后再建一个是"电池发动机"的类,按上述的理念,"发动机"类应该设计成抽象类
"电池发动机"是继承了"发动机"的类之后再有一个"光能发动机",也是继承自"发动机"这个抽象类但如果之后再要建一个"光电发动机"呢?在不新建类的情况下,这种情况"发动机"如果是抽象类的话没法表述如果是接口的话就可以.但这样违背了继承关系的理念了看着这些例子,头都大了

解决方案 »

  1.   

    关于抽象类和接口各自的适用情况,我没有全面的理解,但有一个具体的心得,可以供参考。如果你定义“发动机”是为了让它作为 callee 与将来的 caller 之间达成一个 contract,使得 caller 能够以“通用”的方式操纵各种发动机,那么,这时更倾向于使用“接口”;如果你定义“发动机”是为了将来能方便地实现各种发动机类,为它们提供一些基本的行为支持,从而尽可能实现代码重用,那么,这时更倾向于使用“抽象类”,在这个抽象类里实现一些基本的功能,同时留出一些抽象方法要求将来的实现类来完成。当然,不是所有的情况都能分得这么清楚,那就需要权衡了,而且,“抽象类”和“接口”并不是互斥的,可以配合使用。另外,像“代理模式”等设计模式,也可以考虑配合使用。
      

  2.   

    maquan('ma:kju) ( ) 信誉:100  2006-07-07 10:54:00  得分: 0  
     
     
       关于抽象类和接口各自的适用情况,我没有全面的理解,但有一个具体的心得,可以供参考。如果你定义“发动机”是为了让它作为 callee 与将来的 caller 之间达成一个 contract,使得 caller 能够以“通用”的方式操纵各种发动机,那么,这时更倾向于使用“接口”;如果你定义“发动机”是为了将来能方便地实现各种发动机类,为它们提供一些基本的行为支持,从而尽可能实现代码重用,那么,这时更倾向于使用“抽象类”,在这个抽象类里实现一些基本的功能,同时留出一些抽象方法要求将来的实现类来完成。当然,不是所有的情况都能分得这么清楚,那就需要权衡了,而且,“抽象类”和“接口”并不是互斥的,可以配合使用。另外,像“代理模式”等设计模式,也可以考虑配合使用。
      
     
    你指的 maquan('ma:kju) ( ) 信誉:100  2006-07-07 10:54:00  得分: 0  
     
     
       关于抽象类和接口各自的适用情况,我没有全面的理解,但有一个具体的心得,可以供参考。如果你定义“发动机”是为了让它作为 callee 与将来的 caller 之间达成一个 contract,使得 caller 能够以“通用”的方式操纵各种发动机,那么,这时更倾向于使用“接口”;如果你定义“发动机”是为了将来能方便地实现各种发动机类,为它们提供一些基本的行为支持,从而尽可能实现代码重用,那么,这时更倾向于使用“抽象类”,在这个抽象类里实现一些基本的功能,同时留出一些抽象方法要求将来的实现类来完成。当然,不是所有的情况都能分得这么清楚,那就需要权衡了,而且,“抽象类”和“接口”并不是互斥的,可以配合使用。另外,像“代理模式”等设计模式,也可以考虑配合使用。
      
     ------------------------------------------
    你指的"配合使用"是指让抽象类实现接口吗?