override(重寫):
1.方法名、參數、返回值不同。
2.子類方法不能縮小父類方法的訪問權限。
3.子類方法不能拋出比父類方法更多的異常(但子類方法可以不拋異常)
4.存在於父類和子類之間。
5.方法被定義為final時不能被重寫。
overload(重載):
1.參數類型、個數、順序至少一種不相同。
2.不能重載只有返回值不同的方法名。
3.存在於父類和子類、同類中。
Java 中的覆蓋@Override注解 寫與不寫的一點點理解
一般來說,寫與不寫沒什么區別,JVM可以自識別
寫的情況下:即說明子類要覆蓋基類的方法,基類必須存在方法
(控制類型public,protected,返回值,參數列表類型)與子類方法完成一致的方法,否則會報錯(找不到被Override的方法)。
在不寫@Override注解的情況下,當基類存在與子類各種條件都符合的方法是即實現覆蓋;
如果條件不符合時,則是當成新定義的方法使用。
所以如果想覆蓋基類方法時,最好還是寫上@Override注解,這樣有利於編譯器幫助檢查錯誤
*/
//示例:
public class OverrideTest extends Test{
@Override//此處寫與不寫都能覆蓋基類的t(String)方法
public void t(String s){
System.out.println("OverrideTest.t(String):" + s);
}
//此處不能寫@Override注解,因為方法參數類型與基類的t2方法的參數類型不同
//所以此處只能新定義了一個t2(float)方法,並不能實現覆蓋
public void t2(float f){
System.out.println("OverrideTest.t2(float):" + f);
}
public static void main(String[] args){
OverrideTest ot = new OverrideTest();
ot.t("china34420");
ot.t2(1.0f);
ot.t2(1);
ot.t3();
}
}
/*輸出:
OverrideTest.t(String):china34420
OverrideTest.t2(float):1.0
Test.t2(int):1
OverrideTest.t(String):override
*/
class Test{
public void t(String s){
System.out.println("Test.t(String):" + s);
}
public void t2(int i){
System.out.println("Test.t2(int):" + i);
}
public void t3(){
t("override");
}
}