RTRTRT  
书上说的太虚了:要先考虑组合,后考虑继承,求大神一语道破,传我瞬间判断神功。
例如:
现有一个接口
inter A { 
     func();
}类B ,类C继承A接口 ,且各有一个自己的方法:
class B implement A {          
     func(){};
     funcB(){};
}      不是抽象类class C implement A {
     func(){};
     funcC(){};
}     不是抽象类现类D 要同时具有 func(),funcA(),func()B三个方法,该使用继承还是组合???
(1)class D inter B inter C{
   }
(2)class D {
       B *b;
       C *c;
   }
哪个好,在代码的扩展与维护方面?再次求大神传秘笈,怎样快速有效的判断出何时用组合,何时用继承。问题竟然不能同时发两个板块 郁闷继承  设计模式

解决方案 »

  1.   

    提下自己的见解:在《Thinking in java》一书中,作者提到:如果只是想单纯的使用某一个类的功能时,使用组合比较好。组合不会使得你的类成为你要使用的类的类型。建议看下我说的这本书。
      

  2.   

    实例化可能会比较好,因为B,C同时继承了A接口,就肯定对接口A内的方法具体实现了,你用组合,就会出现方法冲突,不知道调用的是哪个类的具体实现
    实例化B,C,可以具体的知道该调用类内哪个方法,并且不出现冲突。
      

  3.   

    java可以实现多个接口  但是只能继承一个类
    class D inter B inter C{
       }
    这个写法本身就是错的,这种情况只能用组合组合比继承好的原因是  组合的耦合性更低
      

  4.   


    class D implement A {
           B b;
           C c;
           func();//根据实际需要调用b或c的func(),也可以自己写
       }
      

  5.   

    参见一下effective Java的某一节: prefer composition over inheritance大意是继承破坏了信息隐藏原则,因为子类的实现依赖于父类的实现。楼主这种情况,使用组合是唯一选择。
    class D {
      public void funcOfA() { a.func();}
      public void funcOfB() { b.func();}
      public void funcA() {a.funcA();}
      public void funcB() {b.funcB();}
    }另外楼主想要D有func, funcA和funcB的想法是不可能的,或者楼主的意思是D的func是D自己的实现?