转载出处,很不错的文章收藏学习http://blog.csdn.net/zhuanshenfanhua123/article/details/14119759
1.相同点:二者都是实现类重用的重要方式。
2.不同点:继承会破坏封装性。
例:
- class A
- {
- public void fun(){}
- public void breath(){}
- }
- class B extends A
- {
- public void funb(){}
- }
- class C extends A
- {
- public void func(){}
- }
使用组合的方法如下:
- class A
- {
- public void fun(){}
- public void breath(){}
- }
- class B
- {
- private A a;//将原来的父类嵌入原来的子类中,作为子类的一部分
- public void funb(){}
- public B(A a)
- {this.a=a;}
- public void breath(){a.breath();}//实现复用}
- }
- class C {
- private A a;
- public C(A a)
- {this.a=a;}
- public void breath(){a.breath();}
- }
3.何时用继承,何时用组合?
继承是对已有的类进行改造,父类中主要是包含通用的属性和方法,获得的子类是一个特殊版本的类,将具有明显继承关系的两个类使用继承,比如动物和狗,狗不是由动物组成的,而狗可以继承动物的通用属性和方法,则使用继承比较合适。
如果为人和腿的话,则明显腿是人的组成部分,使用组合比较合适。