2、Overload返回值類型不同不能作爲不同的兩個函數,Override應該完全一樣的返回類型。
overload:
public a(){}
public a(int a){]
在一個類中有同名的方法,但是方法帶有不同的參數
Override:
public class a{
public aaa(){]
}
public class b extends a {
public aaa(){}
}
方法aaa Override
還有,overload一般發生在同一個類中的有着不同的參數名和(或)不同數量的參數的同名方法之間,但同名方法的返回值可以一樣
override比較常見的是子類繼承父類後,override父類中的一些方法以滿足自己的需要。
我好像記得override的方法前的訪問控制不能比父類中的方法中的控制權限低,就是說protected的父類方法不能被override成private或default的,你可以去看看書,書上應該有介紹。
>>overload(通常被翻譯爲過載或重載)
一般語境裏overload是對method(方法)而言的,可以指一個類中多個名字相同而參數類型列表不相同的方法,這個名字代表的方法就是被overload了的。編譯器會根據參數類型列表的不同來決定調用叫這個名字的很多方法中具體的哪一個。
>>override(通常被翻譯爲覆蓋)
一般語境裏,如果說這個method(方法)是被override來的,就是說在定義這個方法的類的父類中有一個與這個方法同名且參數類型列表相同的方法,在子類中,這個方法被override了。在對這個子類的實例調用該方法時,編譯器確切的知道調用的是這個子類的方法。
考慮這樣兩個類:
class Father {
public void doSomething(){}
public void doSomething(int a){}
public void doSomething(String s, int a){}
}
class Son extends Father {
public void doSomething(String s, int a) {}
public void doSomething(int a, String s){}
}
Father類中有3個doSomething方法,唯一的區別是參數類型列表,它們是overload了的方法。再看子類,第一個方法也叫doSomething,且父類中有一個doSomething方法和這個方法的參數類型列表相同,所以這是override;而第二個方法雖然名字也叫doSomething,但它的參數類型列表跟父類中和子類中其他的doSomething方法的參數類型列表不一致,所以編譯器默認這是一個overload的方法。那實際上我們有多少種方式來調用Son的實例呢?如下:
new Son().dosomething();
new Son().dosomething(3);
new Son().dosomething("Hi", 5);
new Son().dosomething(7, "Hello");
其中前三個是從父類繼承的,且第三個是調用的子類的那個public void doSomething(String s, int a){}方法,最後一個是在子類中新定義的一個overload的方法。
注意:overload是指同樣的東西在不同的地方具有多種含義,而override是指它隨時隨地都只有一種含義。