熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java二進制兼容規則:域

2013-11-15 11:39:20  來源: JSP教程 

  
  域和方法不同刪除了類的一個方法後它有可能通過繼承獲得一個具有同樣名稱參數的不同方法但域不能覆蓋這使得域在二進制兼容方面的表現也有所不同
  
  例如假設有下面三個類
  
  class Language {
   String greeting = 你好;
  }
  
  class German extends Language {
   String greeting = Guten tag;
  }
  
  class French extends Language {
   String greeting = Bon jour;
  }
  
  則void test() { Systemoutprintln(new French()greeting); }的輸出結果是Bon jour但是void test() { Systemoutprintln(((Language) new French())greeting); }的輸出結果是你好這是因為實際訪問的域依賴於實例的類型在第一個輸出例子中test訪問的是一個French對象所以輸出結果是French的問候語但在第二個例子中雖然實際上訪問的是一個French對象但由於French對象已經被定型成Language對象所以輸出結果是Language的問候語
  
  如果把上例的Language改成下面的形式
  
  class Language { }
  
  再次運行test(不重新編譯)得到的結果是一個錯誤信息javalangNoSuchFieldError: greeting如果重新編譯test則出現編譯錯誤cannot resolve symbolsymbol : variable greeting location: class Language Systemoutprintln(((Language) new French())greeting);test仍能正常運行無需重新編譯因為它不需要Language包含的greeting變量

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19380.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.