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

首頁 > 學院 > 開發設計 > 正文

Java的延遲綁定

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

  理解二進制兼容的要害是要理解延遲綁定(Late Binding)。延遲綁定是指java直到運行時才檢查類、域、方法的名稱,而不象C/C++的編譯器那樣在編譯期間就清除了類、域、方法的名稱,代之以偏移量數值——這是Java二進制兼容得以發揮作用的要害。
  
  由于采用了延遲綁定技術,方法、域、類的名稱直到運行時才解析,意味著只要域、方法等的名稱(以及類型)一樣,類的主體可以任意替換——當然,這是一種簡化的說法,還有其他一些規則制約Java類的二進制兼容性,例如訪問屬性(PRivate、public等)以及是否為abstract(假如一個方法是抽象的,那么它肯定是不可直接調用的)等,但延遲綁定機制無疑是二進制兼容的核心所在。
  
  只有把握了二進制兼容的規則,才能在改寫類的時候保證其他類不受到影響。下面再來看一個例子,FrodoMail和SamMail是兩個Email程序:
  
  abstract class Message implements Classifiable { }
  class EmailMessage extends Message {
   public boolean isJunk() { return false; }
  }
  
  interface Classifiable {
   boolean isJunk();
  }
  
  class FrodoMail {
   public static void main(String a[]) {
    Classifiable m = new EmailMessage();
    System.out.println(m.isJunk());
   }
  }
  
  class SamMail {
   public static void main(String a[]) {
    EmailMessage m = new EmailMessage();
    System.out.println(m.isJunk());
   }
  }
  
  
  
  
  
  假如我們重新實現Message,不再讓它實現Classifiable接口,SamMail仍能正常運行,但FrodoMail會拋出異常:java.lang.IncompatibleClassChangeError at FrodoMail.main。這是因為SamMail不要求EmailMessage是一個Classifiable,但FrodoMail卻要求EmailMessage是一個Classifiable,編譯FrodoMail得到的二進制.class文件引用了Classifiable這個接口名稱。符合Classifiable接口定義的方法仍然存在,但該類卻根本沒有提到Classifiable這個接口。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平顺县| 阿瓦提县| 沾化县| 四会市| 亚东县| 玛曲县| 曲松县| 罗田县| 漾濞| 鄂托克前旗| 莱芜市| 蓬溪县| 峨边| 芮城县| 介休市| 定兴县| 白沙| 巴南区| 海门市| 原平市| 南靖县| 乌兰察布市| 临清市| 高碑店市| 拉萨市| 兴和县| 宁明县| 西乡县| 藁城市| 苏州市| 商河县| 昌乐县| 塔河县| 克东县| 延寿县| 余姚市| 田东县| 宜黄县| 平安县| 富裕县| 绥芬河市|