Java中组合与继承的区别与不同的应用场景

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");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值