首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 繼承中的方法重載:子類重新定義不會隱藏父類重載版本

     編輯:Java 綜合教學

Java 繼承中的方法重載特性

如果基類中一個方法名被重載多個版本,子類對該方法名的重新定義不會隱藏基類的任何重載版本。無論方法定義在哪一層,重載機制均有效。

代碼示例

public class Hide {
    public static void main(String[] args) {
        Bart b = new Bart();
        b.doh(1);        // 調用 doh(float)
        b.doh('x');      // 調用 doh(char)
        b.doh(1.0f);     // 調用 doh(float)
        b.doh(new Milhouse()); // 調用 Bart.doh(Milhouse)
    }
}

class Homer {
    char doh(char c) { System.out.println("doh(char)"); return 'd'; }
    float doh(float f) { System.out.println("doh(float)"); return 1.0f; }
}

class Milhouse {}

class Bart extends Homer {
    void doh(Milhouse m) { }
}

輸出結果

doh(float)
doh(char)
doh(float)
(無輸出,調用 Bart.doh(Milhouse))

解析

  • b.doh(1):int 隱式轉 float,匹配 Homer.doh(float)
  • b.doh('x'):精確匹配 Homer.doh(char)
  • b.doh(1.0f):精確匹配 Homer.doh(float)
  • b.doh(new Milhouse()):匹配子類 Bart.doh(Milhouse)

父類的重載方法未被子類新增方法遮蔽,體現 Java 重載解析靜態綁定特性:編譯期根據參數靜態類型決定調用哪個重載版本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved