[英]Method overloading or overriding?
我們有一個父子 class,它有同名的方法,但參數是原語和包裝器。 有人可以解釋一下這是否被稱為方法覆蓋和方法重載的原因。 運行這個程序會調用 Parent 方法——它會覆蓋而不是重載,尋找解釋。
class Parent {
public void takeValue(int a) {
System.out.println("take value method from parent is invoked");
}
}
class Child extends Parent {
public void takeValue(Integer a) {
System.out.println("take value method from child is invoked");
}
public static void main(String[] args) {
Parent p = new Child();
p.takeValue(new Integer(51));
}
}
該方法已重載。
運行這個程序會調用 Parent 方法——它會覆蓋而不是重載
是的。 您正在對Parent
變量調用takeValue
,這意味着編譯器將在Parent
class 上查找簽名匹配。 這里甚至看不到重載(簽名是根據 static 類型匹配的,即 java 根據調用方法的變量的聲明數據類型查找方法,而不是使用 ZA8ZCFDE6331DC4BEB6666661AC 變量的數據類型,這將是一個運行時的事情)。
並且因為public void takeValue(Integer a)
在檢查方法調用時沒有被編譯器考慮,所以p.takeValue(new Integer(51));
通過自動裝箱鏈接到Parent.takeValue(int)
(如果它們都是可見的,它將匹配其他方法 - 或者在此示例中在Parent
class 中聲明)。
這是超載。 您具有相同的名稱,但輸入參數的類型不同。
要確認這一點,當您嘗試附加@Override
注釋時會收到錯誤消息。
Integer
和int
是不同的類型。
在Java
, Overriding
和Overloading
是非常重要的概念。要充分理解差異,我強烈建議您閱讀以下內容:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.