Java组合和继承的区别

Java组合和继承的区别

 组合与继承都是为了复用代码,利用现有类型生成新类型。
 组合是在新的类中产生现有类的对象,由于新的类是由现有类的对象所组成的,因而叫作组合。组合是一种"has-a"的关系,像是一种部分与整体的关系,类似于将很多整体的部分拿出来组合出来一个新的整体。如下所示:

public class FlyingTiger {
	private Tiger tiger = new Tiger();
	private Bird bird = new Bird();
	...
}
public class Tiger {
	...
	public void jump(){...}
	public void eat(){...}
	...
}
public class Bird {
	...
	public void fly(){...}
	public void lay_eggs(){...}
	...
}

 继承是按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码。继承是一种“is-a”的关系,像是一种拷贝模板的关系,类似于将原有的模板原样拷贝过来然后在上面进行修改。如下所示:

public class Tiger {
	...
	public void jump(){...}
	public void eat(){...}
	...
}
public class Bird {
	...
	public void fly(){...}
	public void lay_eggs(){...}
	...
}
public class FlyingTiger extends Tiger {
	...
	public void fly(){...}
	public void lay_eggs(){...}
	...
}

 很多情况下,其实使用组合是更优于继承的。因为Java只支持单继承,继承也算是一种资源,能少用还是要尽量少用,并且继承太多后会导致新类非常的笨重。而使用组合的话则更加方便一些,相当于要做一个新东西出来,只去取一些我们需要的零件来拼凑远比去将整体复制出来再修改容易很多。当然,对于某些比如在一直更新添加新东西的类型来说,继承是最佳选择。还可以将组合和继承结合来用,效果可能会更好,如下面所示。对于选择组合还是继承,还是要根据具体情况来具体对待。

public class Tiger {
	...
	public void jump(){...}
	public void eat(){...}
	...
}
public class Bird {
	...
	public void fly(){...}
	public void lay_eggs(){...}
	...
}
public class FlyingTiger extends Tiger {
	...
	private Bird bird = new Bird();
	...
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loser与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值