Java中组合与继承都可以实现代码的复用,甚至可以相互替换。但仅从语言的逻辑上看,继承(extend)更应该用于包含关系(sth is a sth_baby),而组合可以是并列或者说共有的关系(sth has a sth_baby)。
组合实现:
package cn.LYZ.oop;
public class Animal2 {
String eye;
public void run2(){
System.out.println("runrun2");
}
public void eat2(){
System.out.println("eateat2");
}
public void sleep2(){
System.out.println("zzzzzzzz2");
}
public Animal2(){
//super();
System.out.println("creat an animal2");
}
public static void main(String[] args){
Bird2 b = new Bird2();
b.run2();
b.animal2.eat2();
}
}
class Mammal2 {
Animal2 animal2 = new Animal2();
public void taisheng2(){
System.out.println("taisheng2");
}
}
class Bird2 {
Animal2 animal2 = new Animal2();
public void run2(){
animal2.run2();
//super.run();
System.out.println("little bird2");
}
public void eggsheng2(){
System.out.println("luansheng2");
}
public Bird2(){
//super();
System.out.println("creat a bird2");
}
}
继承实现:
public class Animal {
String eye;
public void run(){
System.out.println("runrun");
}
public void eat(){
System.out.println("eateat");
}
public void sleep(){
System.out.println("zzzzzzzz");
}
public Animal(){
//super();
System.out.println("creat an animal");
}
}
class Mammal extends Animal{
public void taisheng(){
System.out.println("taisheng");
}
}
class Bird extends Animal{
public void run(){
//super.run();
System.out.println("little bird");
}
public void eggsheng(){
System.out.println("luansheng");
}
public Bird(){
//super();
System.out.println("creat a bird");
}
}