优先使用对象组合而不是继承

文章讨论了在面向对象编程中,为何推荐使用对象组合而非继承。组合允许通过接口编程,实现动态复用和更高灵活性,解决了因继承导致的代码污染和方法静态复用的问题。示例展示了如何通过组合不同交通工具类来实现行为的切换。
摘要由CSDN通过智能技术生成

 

class Plane{
public void fly(){}
}
class Ship{
public void swim(){}
}

//优先使用对象组合而不是继承
class ManKind {
private Plane p = new Plane();
private Ship s = new Ship();
public void fly(){
p.fly();
}
public void swim(){
s.swim();
}
}
//交通工具接口
interface Vehicle{
	public  void run();
}
//自行车实现类
class Bike implements Vehicle{
	public void run(){
		System.out.println("骑单车行走");
	}
}
//汽车实现类
class Car implements Vehicle{
	public void run(){
		System.out.println("开汽车行走");
	}
}
//人类--------对接口编程而不是对实现编程。
class CDMan {
	private Vehicle  v;
	public void run(){
		v.run();
	}
//更换交通工具
	public void changeVehicle(Vehicle  v){
		this.v = v;
	}
}
……
CDMan c = new CDMan();

//使用组合可解决继承无法动态复用问题
c.changeVehicle(new Bike());
c.run();//骑单车行走
c.changeVehicle(new Car());
c.run();//开汽车行走
  1. 无法通过继承达到多个类代码的重用。
  2. 父类的方法子类无条件继承,很容易造成方法污染。
  3. 从父类中继承的方法,是一种静态的复用。不能在运行时发生改变,不够灵活。

 

 

 原文:为什么老鸟要告诉你优先使用组合而不是继承? - 知乎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值