从头认识java-6.4 如何在聚合与继承之间选择

这一章节我们来聊一下在聚合与继承之间选择的问题。

在我们平常的编码里面,使用聚合或者继承都可以,或者两者可以混合使用也行,这个时候就需要做出抉择,因为代码以后还需要维护,怎么才能达到维护简单?代码可读?。。。

因此,我们必须在各种方案中做出抉择。

笔者是这样认为的:

如果新的类只是使用老的类的一部分功能,那么就是用聚合,直接new出来就可以了,满足need或者组合这个关系;

如果新的类必须是老的类的一个特殊例子,那么就是用继承,满足is-a或者is-like-a这种关系

例子:

车是交通工具。

代码:

/**
 * 
 */
package com.ray.ch05;

/**
 * @Package:com.ray.ch05
 * 
 * @TODO 测试
 * 
 * @date 2015 10 30
 * 
 * @time 11:42:19
 * 
 * @author JMSCADMIN
 * 
 * @version 1.0
 */
public class Test {

}

class Vehicle {
}

class Car extends Vehicle {
}

class BMW extends Car {
}

车满足is-a交通工具这个关系,BMW满足is-a车这种关系


车是由轮子、车门等组合成的。

/**
 * 
 */
package com.ray.ch05;

/**
 * @Package:com.ray.ch05
 * 
 * @TODO 测试
 * 
 * @date 2015 10 30
 * 
 * @time 11:42:19
 * 
 * @author JMSCADMIN
 * 
 * @version 1.0
 */
public class Test {

}

class Door {
}

class Wheel {
}

class Car {
	private Door leftDoor;
	private Door rightDoor;
	private Wheel leftForwardWheel;
	private Wheel leftBackwardWheel;
	private Wheel rightForwardWheel;
	private Wheel rightBackwardWheel;

}

车和轮子、门等满足车是由xxx组成的这种关系。


总结:这一章节简单讨论了如何在聚合与继承之间选择。



这一章节就到这里,谢谢。

-----------------------------------

目录


从eclipse和网上找到的破解包提取打包成无依赖,独立java程序可用的版本。独立java程序启动的时候增加如下的JVM参数即可 -server -Xmx512m -XX:MaxPermSize=128m -Djava.awt.headless=true -Drebel.spring_plugin=true -noverify -javaagent:D:\apps\jrebel6.4.3\jrebel.jar -Xbootclasspath/p:D:/apps/jrebel6.4.3/rebelboot.jar -Drebel.base=D:\apps\jrebel6.4.3\.jrebel -Drebel.disable_update=true D:\apps\jrebel6.4.3这个为解压后的路径,rebel.base参数指定了jrebel.lic所在的位置,因此无需拷贝到用户目录下。 控制台可以看到如下的输出表示jrebel配置成功。 2016-07-13 11:42:59 JRebel: WARN You are running JRebel using the -javaagent option on a system where -agentpath is supported. 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:02 JRebel: ############################################################# 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:02 JRebel: JRebel Agent 6.4.3 (201604210950) 2016-07-13 11:43:02 JRebel: (c) Copyright ZeroTurnaround AS, Estonia, Tartu. 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:02 JRebel: Over the last 1 days JRebel prevented 2016-07-13 11:43:02 JRebel: at least 1 redeploys/restarts saving you about 0 hours. 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:02 JRebel: Licensed to VIMACER (ZeroTurnaround) 2016-07-13 11:43:02 JRebel: with the following restrictions: 2016-07-13 11:43:02 JRebel: ### Hello World Cracked ### :) 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:02 JRebel: License type: enterprise 2016-07-13 11:43:02 JRebel: Valid from: July 14, 2014 2016-07-13 11:43:02 JRebel: Valid until: August 18, 2888 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:02 JRebel: ############################################################# 2016-07-13 11:43:02 JRebel: 2016-07-13 11:43:04 JRebel: Monitoring Log4j configuration in 'xxxxx/log4j.properties'. 2016-07-13 11:43:06 JRebel: Monitoring properties in 'xxxxx\xxxx.properties'. 2016-07-13 11:43:32 JRebel: Reloading class 'xxxxx'. 2016-07-13 11:43:32 JRebel: Reconfiguring bean 'xxxxx' [xxxxx]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值