• 理解多态


    //为什么要上转型

    //Note.java

    package c07;

    public enum  Note{middleC,cSharp,cFlat;}

    //Music.java

    package c07;

    class Instrument {
    public void play(Note n) {
    System.out.println("Instrument.play()");
    }
    }


    class Wind extends Instrument {
    public void play(Note n) {
    System.out.println("Wind.play()       "+n);
    }
    }


    class Wind2 extends Instrument {
    public void play(Note n) {
    System.out.println("Wind2.play()      "+n);
    }
    }


    public class Music {
    public static void tune(Instrument i) {
    // ...
    i.play(Note.middleC);//关键是这里 i    play  
    }
    public static void main(String[] args) {
    Wind flute = new Wind();
    tune(flute); // Upcasting
    Wind2 flute2 = new Wind2();
    tune(flute2); // Upcasting
    }
    } ///:~

    //不用上转型,很麻烦


    //: Music2.java
    //Overloading instead of upcasting
    class Note2 {
     private int value;
     private Note2(int val) { value = val; }
     public static final Note2
     middleC = new Note2(0),
     cSharp = new Note2(1),
     cFlat = new Note2(2);
    } // Etc.
    class Instrument2 {
     public void play(Note2 n) {
      System.out.println("Instrument2.play()");
     }
    }
    class Wind2 extends Instrument2 {
     public void play(Note2 n) {
      System.out.println("Wind2.play()");
     }
    }
    class Stringed2 extends Instrument2 {
     public void play(Note2 n) {
      System.out.println("Stringed2.play()");
     }
    }
    class Brass2 extends Instrument2 {
     public void play(Note2 n) {
      System.out.println("Brass2.play()");
     }
    }
    public class Music2 {
     public static void tune(Wind2 i) {
      i.play(Note2.middleC);
     }
     public static void tune(Stringed2 i) {
      i.play(Note2.middleC);
     }
     public static void tune(Brass2 i) {
      i.play(Note2.middleC);
     }//相对于上转型是多余的

     public static void main(String[] args) {
      Wind2 flute = new Wind2();
      Stringed2 violin = new Stringed2();
      Brass2 frenchHorn = new Brass2();
      tune(flute); // No upcasting
      tune(violin);
      tune(frenchHorn);
     }
    } ///:~

  • 相关阅读:
    Archlinux笔记本安装手记
    linux下activemq安装与配置activemq-5.15.2
    在 CentOS7 上安装 Zookeeper-3.4.9 服务
    VMware虚拟化kvm安装部署总结
    打印机故障总结
    fluentd安装和配置,收集docker日志
    使用Python和AWK两种方式实现文本处理的长拼接案例
    MySQL数据库使用xtrabackup备份实现小例子
    shell脚本实现ftp上传下载文件
    Linux系统中创建大文件,并作为文件系统使用
  • 原文地址:https://www.cnblogs.com/gaoxiangde/p/4379916.html
Copyright © 2020-2023  润新知