JAVA 多形性

package com.apple;

class Instrument3{
    public void play(){
        System.out.println("Instrument3.play()");
    }
    public String what(){
        return "Instrument3";
    }
    public void adjust(){}
}

class Wind3 extends Instrument3{
    public void play(){
        System.out.println("Wind3.play()");
    }
    public String what(){return "Wind3";}
    public void adjust(){}
}

class Percussion3 extends Instrument3{
    public void play(){
        System.out.println("Percussion3.play()");
    }
    public String what(){return "Percussion3";}
    public void adjust(){}
}

class Stringed3 extends Instrument3{
    public void play(){
        System.out.println("Stringed3.play()");
    }
    public String what(){return "Stringed3";}
    public void adjust(){}
}

class Brass3 extends Wind3{
    public void play(){
        System.out.println("Brass3.play()");
    }
    public void adjust(){System.out.println("Brassed.adjust()");}
}

class Woodwind3 extends Wind3{
    public void play(){
        System.out.println("Woodwind3.play()");
    }
    public void adjust(){System.out.println("Woodwind3.adjust()");}
}


public class Music3 {
    static void tune(Instrument3 i){
        i.play();
    }
    static void tuneALL(Instrument3[] e){
        for (int i=0;i<e.length;i++)
            tune(e[i]);
    }
    public  static void main(String[] args){
        Instrument3[] orchestra=new Instrument3[5];
        int i=0;

        orchestra[i++]=new Wind3();
        orchestra[i++]=new Percussion3();
        orchestra[i++]=new Stringed3();
        orchestra[i++]=new Brass3();
        orchestra[i++]=new Woodwind3();
        tuneALL(orchestra);
    }


}

新的方法是what()和adjust()。前者返回一个String句柄,同时返回对那个类的说明;后者使我们能对每种乐器进行调整。
在main()中,当我们将某样东西置入Instrument3数组的时候,就会自动上溯造型到Instrument3。
可以看到,在围绕tune()方法的其他所有代码都会发生变化的同时,tune()方法却丝毫不受他们的影响,依然正常工作。这正是利用多形性希望达到的目标。我们对代码进行修改后,不会对程序中不应该受到影响的部分造成影响。此外,我们认为多形性是一种至关重要的技术,它允许程序员“将发生改变的东西将没有发生改变的东西区分开来”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值