用Java讲解继承、组合与聚合的关系
分类:Java
来源:网络
时间:2011-03-16 11:30:07
比如有一个歌星类:
public class MusicStar{
public abstract void singing() ;
}
周杰伦类
public class ZhouJieLun extends MusicStar{
public void singing(){
System.out.println("我边吃橄榄边唱歌") ;
}
}
然后,我也要唱歌,但是我自己不会,那怎么办呢?
第一中办法,我继承周杰伦类,用他的方法唱歌,这样我就也会边吃橄榄边唱歌了,代码如下
public class Me extends ZhouJieLun{
public static void main(String[] args){
new Me().singing() ;//打印出“我边吃橄榄边唱歌”
}
}
另外一个办法,就是组合复用
public class Me{
public void singing(){
new ZhouJieLun().singing() ;//打印出“我边吃橄榄边唱歌”
}
}
组合与聚合的关系:
组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这叫聚合。
在实际中组合方式一般这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。
聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它,传给它的这个对象不是A类创建的。
现实生活中:
人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。
- class Hand{
- }
- class Computer{
- }
- 组合:
- class Person{
- private Hand hand;
- public Person(){
- hand = new Hand();
- }
- }
- 聚合:
- class Person{
- private Computer computer;
- public setComputer(){
- computer = new Computer();
- }
- }
可以说聚合是一种强组合的关系,至于什么时候用继承,什么时候用组合,就看具体洞察力
来源:http://blog.sina.com.cn/s/blog_681e57810100jkyb.html
- 默认分类(20)
- J2EE(25)
- Java(56)
- PHP(55)
- SEO(10)
- 网页设计(20)
- 网站建设(37)
- 数据库(7)
- JavaScript(17)
- JQuery(6)
- MySQL(20)
- SQL Server(6)
- Access(1)
- Oracle(6)
- office(6)
- Dreamweaver(4)
- Photoshop(12)
- Flash(9)
- Fireworks(13)
- CSS(14)
- HTML(4)
- .NET(7)
- ASP(2)
- DB2(1)
- Ajax(2)
- Linux(12)
- Struts(7)
- Hibernate(8)
- Spring(2)
- Jsp(22)
- Asp(8)
- C#(3)
- C++(1)
- 网络安全(5)
- 软件工程(7)
- XML(1)
- English(2)
- 计算机等级考试(2)
- 计算机病毒(4)
- 个人日志(76)
- 互联网(15)
- ActionScript(10)
- Android(3)
- 数据结构与算法(1)
- 游戏策略(3)
- 美文翻译(2)
- 编程开发(19)
- 计算机应用(4)
- 计算机(10)
- Unity3d(6)
- 其他(1)
- egret(1)