继承与组合:
如下代码,三个类,体会继承(inherit)与组合(composite)的魅力所在:
继承:
package Inherit;
import static java.lang.System.*;
class Animal{
private void beat(){
out.println("生命在于心脏跳动!");
}
public void breath(){
beat();
out.println("生命在于呼吸之间!");
}
}
class Birds extends Animal{
public void fly(){
out.println("生命在于自由飞翔!");
}
}
class Wolf extends Animal{
public void run(){
out.println("生命在于自由奔跑!");
}
}
public class InheritTest{
public static void main(String[] args){
Birds b=new Birds();
b.breath();
b.fly();
Wolf w=new Wolf();
w.breath();
w.run();
}
}
运行结果:

组合:
package Composite;
import static java.lang.System.*;
class Animal{
private void beat(){
out.println("生命在于心脏跳动!");
}
public void breath(){
beat();
out.println("生命在于呼吸之间!");
}
}
class Birds{
private Animal a;
public Birds(Animal a){
this.a=a;
}
public void breath(){
//-直接复用Animal类breath()方法来实现Birds类的breath()方法;
a.breath();
}
public void fly(){
out.println("生命在于自由飞翔!");
}
}
class Wolf{
private Animal a;
public Wolf(Animal a){
this.a=a;
}
public void breath(){
//-直接复用Animal类breath()方法来实现Wolf类的breath()方法;
a.breath();
}
public void run(){
out.println("生命在于自由奔跑!");
}
}
public class CompositeTest{
public static void main(String[] args){
Animal a=new Animal();
Birds b=new Birds(a);
b.breath();
b.fly();
Wolf w=new Wolf(a);
w.breath();
w.run();
}
}
运行结果:

总结:
1、继承,是实现类复用的重要手段,但带来了最大的一个坏处:破坏封装
2、组合,也是实现类复用的重要方式,而且能提供更好的封装性
何时用继承?组合?
1、继承:对已有的类做一番改造,以此获得一个特殊的版本,继承表达的是一种“是(is-a)”的关系
2、组合:两个类之间有明确的整体、部分的关系,组合表达的是一种“有(has-a)”的关系
不管是用继承还是组合,对系统的开销来说没有本质的区别!!!
热心技术,并兼吃喝,偶谈风月,不言国事.
浙公网安备 33010602011771号