Google
      
发新话题
打印

浅谈 java 多态

浅谈 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() 方法中也要为之添加实现。显然这样是一个好的扩展软件所不能接受的 .,...

          面向对象的思想告诉我们要 面向接口编程。而不是面向具体的实现!

在这里,只用一个“抽象” 的乐器去接收一种特定的 乐器(笛子, 钢琴....)  ,然后程序运行时根究用户的选择来进行动态的绑定。 以至程序能在运行期 调用合适对象的合适的方法



后记:呵呵, 第一次来这里发帖! 感觉还蛮不错的  , 由于思路整理的还不是蛮清晰 .。 有些地方可能写的不是蛮合适, 还望 各位能指出 !

共勉:优秀的程序员,并不一定是能搞出个功能多么花俏的程序而已! 应该在思想上有所突破, 在一个大的概念上对软件有一个架构。 能满足不同需求的扩展, 前者目前居多, 而后者才应该是一个优秀的程序员应该必备的
寻找一个支点,把自己从人群中撬起来

TOP

发新话题