国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

為什么要上溯造型

2019-11-18 13:21:25
字體:
來源:轉載
供稿:網友

  這個程序看起來也許顯得有些希奇。為什么所有人都應該有意忘記一個對象的類型呢?進行上溯造型時,就可能產生這方面的迷惑。而且假如讓tune()簡單地取得一個Wind句柄,將其作為自己的自變量使用,似乎會更加簡單、直觀得多。但要注重:假如那樣做,就需為系統(tǒng)內Instrument的每種類型寫一個全新的tune()。假設按照前面的推論,加入Stringed(弦樂)和Brass(銅管)這兩種Instrument(樂器):
  
  //: 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);
   }
  } ///:~
  
  這樣做當然行得通,但卻存在一個極大的弊端:必須為每種新增的Instrument2類編寫與類緊密相關的方法。這意味著第一次就要求多得多的編程量。以后,假如想添加一個象tune()那樣的新方法或者為Instrument添加一個新類型,仍然需要進行大量編碼工作。此外,即使忘記對自己的某個方法進行過載設置,編譯器也不會提示任何錯誤。這樣一來,類型的整個操作過程就顯得極難治理,有失控的危險。
  
  但假如只寫一個方法,將基礎類作為自變量或參數(shù)使用,而不是使用那些特定的衍生類,豈不是會簡單得多?也就是說,假如我們能不顧衍生類,只讓自己的代碼與基礎類打交道,那么省下的工作量將是難以估計的。
  
  這正是“多形性”大顯身手的地方。然而,大多數(shù)程序員(非凡是有程序化編程背景的)對于多形性的工作原理仍然顯得有些生疏。

上一篇:名字的隱藏

下一篇:final的注意事項

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 原阳县| 永寿县| 宜城市| 桃园市| 大英县| 文登市| 衡东县| 凤城市| 曲水县| 怀远县| 南乐县| 台湾省| 怀来县| 临漳县| 稷山县| 龙游县| 利津县| 新乡市| 郯城县| 达日县| 吴旗县| 郧西县| 盐山县| 泸定县| 盱眙县| 射洪县| 清水县| 灯塔市| 南昌市| 德阳市| 平凉市| 铜陵市| 莲花县| 建平县| 奉化市| 修水县| 郑州市| 巩留县| 云和县| 成武县| 保亭|