麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

多形性擴展性

2019-11-18 13:21:40
字體:
供稿:網(wǎng)友

  現(xiàn)在,讓我們?nèi)匀环祷貥菲鳎↖nstrument)示例。由于存在多形性,所以可根據(jù)自己的需要向系統(tǒng)里加入任意多的新類型,同時毋需更改true()方法。在一個設(shè)計良好的OOP程序中,我們的大多數(shù)或者所有方法都會遵從tune()的模型,而且只與基礎(chǔ)類接口通信。我們說這樣的程序具有“擴展性”,因為可以從通用的基礎(chǔ)類繼續(xù)新的數(shù)據(jù)類型,從而新添一些功能。假如是為了適應(yīng)新類的要求,那么對基礎(chǔ)類接口進行操縱的方法根本不需要改變,
  
  對于樂器例子,假設(shè)我們在基礎(chǔ)類里加入更多的方法,以及一系列新類,那么會出現(xiàn)什么情況呢?下面是示意圖:
  
多形性擴展性


  所有這些新類都能與老類——tune()默契地工作,毋需對tune()作任何調(diào)整。即使tune()位于一個獨立的文件里,而將新方法添加到Instrument的接口,tune()也能正確地工作,不需要重新編譯。下面這個程序是對上述示意圖的具體實現(xiàn):
  
  //: Music3.java
  // An extensible PRogram
  import java.util.*;
  
  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("Brass3.adjust()");
   }
  }
  
  class Woodwind3 extends Wind3 {
   public void play() {
  System.out.println("Woodwind3.play()");
   }
   public String what() { return "Woodwind3"; }
  }
  
  public class Music3 {
   // Doesn't care about type, so new types
   // added to the system still work right:
   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;
  // Upcasting during addition to the array:
  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句柄,同時返回對那個類的說明;后者使我們能對每種樂器進行調(diào)整。
  
  在main()中,當(dāng)我們將某樣?xùn)|西置入Instrument3數(shù)組時,就會自動上溯造型到Instrument3。
  
  可以看到,在圍繞tune()方法的其他所有代碼都發(fā)生變化的同時,tune()方法卻絲毫不受它們的影響,依然故我地正常工作。這正是利用多形性希望達到的目標。我們對代碼進行修改后,不會對程序中不應(yīng)受到影響的部分造成影響。此外,我們認為多形性是一種至關(guān)重要的技術(shù),它答應(yīng)程序員“將發(fā)生改變的東西同沒有發(fā)生改變的東西區(qū)分開”。

上一篇:final方法

下一篇:產(chǎn)生正確的行為

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄污网站在线观看 | 牛牛a级毛片在线播放 | 天堂福利电影 | www.国产.com | 精品一区二区三区电影 | 亚洲最新无码中文字幕久久 | 国av在线 | 成人国产精品一区 | 亚洲导航深夜福利涩涩屋 | 久久毛片免费 | 男男羞羞视频网站国产 | 天天色人人爱 | 男女隐私免费视频 | 欧美一级高潮片免费的 | 337p日本欧洲亚洲大胆精蜜臀 | 免费激情网址 | 国产毛片aaa一区二区三区视频 | 国内精品视频饥渴少妇在线播放 | 九九热九九爱 | 欧美成人一级片 | 欧美精品网址 | 鲁人人人鲁人人鲁精品 | 色成人在线 | 成人在线视频免费看 | 意大利av在线| 亚洲天堂成人在线 | 国产精品成人免费一区久久羞羞 | 国产大片免费看 | 性感美女一级毛片 | 特级a欧美做爰片毛片 | 久久久www成人免费精品 | 国产精品刺激对白麻豆99 | 销魂美女一区二区 | 亚洲精品成人在线视频 | 欧美视频一区二区三区在线观看 | 国产羞羞视频在线观看免费应用 | 国产99久久久久久免费看农村 | 亚洲午夜久久久久 | 亚洲小视频在线观看,com | 久久精品视频黄色 | av不卡免费在线 |