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

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

多形性的覆蓋與過載

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

  現(xiàn)在讓我們用不同的眼光來看看本章的頭一個(gè)例子。在下面這個(gè)程序中,方法play()的接口會(huì)在被覆蓋的過程中發(fā)生變化。這意味著我們實(shí)際并沒有“覆蓋”方法,而是使其“過載”。編譯器答應(yīng)我們對(duì)方法進(jìn)行過載處理,使其不報(bào)告出錯(cuò)。但這種行為可能并不是我們所希望的。下面是這個(gè)例子:
  
  //: WindError.java
  // Accidentally changing the interface
  
  class NoteX {
   public static final int
    MIDDLE_C = 0, C_SHARP = 1, C_FLAT = 2;
  }
  
  class InstrumentX {
   public void play(int NoteX) {
    System.out.   }
  }
  
  class WindX extends InstrumentX {
   // OOPS! Changes the method interface:
   public void play(NoteX n) {
    System.out.println("WindX.play(NoteX n)");
   }
  }
  
  public class WindError {
   public static void tune(InstrumentX i) {
    // ...
    i.play(NoteX.MIDDLE_C);
   }
   public static void main(String[] args) {
    WindX flute = new WindX();
    tune(flute); // Not the desired behavior!
   }
  } ///:~
  
  這里還向大家引入了另一個(gè)易于混淆的概念。在InstrumentX中,play()方法采用了一個(gè)int(整數(shù))數(shù)值,它的標(biāo)識(shí)符是NoteX。也就是說,即使NoteX是一個(gè)類名,也可以把它作為一個(gè)標(biāo)識(shí)符使用,編譯器不會(huì)報(bào)告出錯(cuò)。但在WindX中,play()采用一個(gè)NoteX句柄,它有一個(gè)標(biāo)識(shí)符n。即便我們使用“play(NoteX NoteX)”,編譯器也不會(huì)報(bào)告錯(cuò)誤。這樣一來,看起來就象是程序員有意覆蓋play()的功能,但對(duì)方法的類型定義卻稍微有些不確切。然而,編譯器此時(shí)假定的是程序員有意進(jìn)行“過載”,而非“覆蓋”。請(qǐng)仔細(xì)體會(huì)這兩個(gè)術(shù)語的區(qū)別。“過載”是指同一樣?xùn)|西在不同的地方具有多種含義;而“覆蓋”是指它隨時(shí)隨地都只有一種含義,只是原先的含義完全被后來的含義取代了。請(qǐng)注重假如遵守標(biāo)準(zhǔn)的Java命名規(guī)范,自變量標(biāo)識(shí)符就應(yīng)該是noteX,這樣可把它與類名區(qū)分開。
  
  在tune中,“InstrumentX i”會(huì)發(fā)出play()消息,同時(shí)將某個(gè)NoteX成員作為自變量使用(MIDDLE_C)。由于NoteX包含了int定義,過載的play()方法的int版本會(huì)得到調(diào)用。同時(shí)由于它尚未被“覆蓋”,所以會(huì)使用基礎(chǔ)類版本。
  
  輸出是:
  
  InstrumentX.play()

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鲁甸县| 萨迦县| 扶沟县| 霍城县| 五常市| 新建县| 和静县| 湘西| 古丈县| 紫金县| 阿城市| 娱乐| 文成县| 华宁县| 吴旗县| 甘孜| 丰都县| 广元市| 双柏县| 云和县| 札达县| 恭城| 朝阳区| 南城县| 潢川县| 攀枝花市| 吉水县| 中超| 宁陵县| 同德县| 宁海县| 桐柏县| 黄浦区| 宾川县| 和平县| 淮北市| 莒南县| 攀枝花市| 崇阳县| 庄河市| 旺苍县|