浅谈 java 多态
最近感觉时间还蛮充足的, 闲的慌 就到书店买了本《JAVA编程思想》。相信所有学java的都应该知道这本书
经典就是经典,看了之后总想写写心得。 以后就和大家一起分享吧!
多态:即不同的对象能对相同的消息做出响应!
/**
*基类 :乐器类
*
*/
public class Instrument{
public void play(String musicName){
System.out.println("Instrument.play()");
}
}
/**
*子类(导出类)Pipe 笛子
*/
public class Pipe extends Instrument{
public void play(){
System.out.println("Pipe .play()");
}
}
/**
* 子类 Piano 钢琴
*/
public class Piano extends Instrument{
public void play(){
//重写父类构造方法
System.out.println("Pipe .play()");
}
}
/**
* HaohuiMusic 浩辉音乐工厂类, 用于根据用户的喜好。提供不同乐器的Music
*/
public class HaohuiMusic{
//经典: 用一个“抽象”的乐器,来接收用户传递的详细的乐器种类
public static void makeMusic(Instrument i){
i.play();
}
public static void main(String[] args){
//生产用户乐器
Pipe win = new Pipe ();
makeMusic(win);//自动向上转型为 Instrument 类
}
/**
* 输出结果为:Pipe .play()
*/
Tips: 有人会认为 HaohuiMusic 类的 makeMusic() 方法也可以接收 特定类型的乐器
例如:public void makeMusic(Pipe pipe){
pile.play();
}
这样不是更直观吗 ? 给我笛子我就用笛子接收,直接调用笛子的play() 方法 !!!
表面上看上去是很直观,但是 随着新的乐器的增多, 不得不在 HaohuiMusic 类里面重载更多的 makeMusic() 方法
这样一但新添了一种乐器,不仅要实现 play() 方法, 而且在 makeMusic() 方法中也要为之添加实现。显然这样是一个好的扩展软件所不能接受的 .,...
面向对象的思想告诉我们要 面向接口编程。而不是面向具体的实现!
在这里,只用一个“抽象” 的乐器去接收一种特定的 乐器(笛子, 钢琴....) ,然后程序运行时根究用户的选择来进行动态的绑定。 以至程序能在运行期 调用合适对象的合适的方法
后记:呵呵, 第一次来这里发帖! 感觉还蛮不错的 , 由于思路整理的还不是蛮清晰 .。 有些地方可能写的不是蛮合适, 还望 各位能指出 !
共勉:优秀的程序员,并不一定是能搞出个功能多么花俏的程序而已! 应该在思想上有所突破, 在一个大的概念上对软件有一个架构。 能满足不同需求的扩展, 前者目前居多, 而后者才应该是一个优秀的程序员应该必备的