Java—重寫與過載的區別
1.重寫(Override)
從字面上看,重寫就是 重新寫一遍的意思。其實就是在子類中把父類本身有的方法重新寫一遍。子類繼承了父類原有的方法,但有時子類並不想原封不動的繼承父類中的某個方法,所以在方法名,引數列表,返回型別(除過子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下, 對方法體進行修改或重寫,這就是重寫。但要注意子類函式的訪問修飾許可權不能少於父類的。
例如:
public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Son s = new Son();
s.sayHello();
}
public void sayHello() {
System.out.println("Hello");
}
}
class Son extends Father{
@Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("hello by ");
}
}
重寫 總結:
1.發生在父類與子類之間
2.方法名,引數列表,返回型別(除過子類中方法的返回型別是父類中返回型別的子類)必須相同
3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
4.重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常
2.過載(Overload)
在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同甚至是引數順序不同)則視為過載。同時,過載對返回型別沒有要求,可以相同也可以不同,但不能通過返回型別是否相同來判斷過載。
例如:
public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Father s = new Father();
s.sayHello();
s.sayHello("wintershii");
}
public void sayHello() {
System.out.println("Hello");
}
public void sayHello(String name) {
System.out.println("Hello" + " " + name);
}
}
過載 總結:
1.過載Overload是一個類中多型性的一種表現
2.過載要求同名方法的引數列表不同(引數型別,引數個數甚至是引數順序)
3.過載的時候,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準
過載(Overload)和重寫(Override)的區別?
答:方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的引數列表,有相容的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常(里氏代換原則)。過載對返回型別沒有特殊的要求,不能根據返回型別進行區分。
相關文章
- 過載和重寫的區別
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 面試官:Java的重寫和過載有什麼區別?面試Java
- Java 重寫(Override)與過載(Overload)JavaIDE
- C++中過載、重寫、重定義的區別C++
- Java-override重寫與overload過載JavaIDE
- Java中方法重寫與方法過載Java
- Java中的過載和重寫Java
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 重寫、覆蓋、過載、多型幾個概念的區別分析多型
- 方法重置和重寫的區別
- override(重寫) and overload(過載)IDE
- AI回答記錄:python中有過載與重寫的概念嗎?AIPython
- 重建模與重構的區別
- Python中有重寫和過載的方法嗎?Python
- Java中(==)與equals的區別Java
- Java synchronized與ReentrantLock的區別JavasynchronizedReentrantLock
- 二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)SpringGCCloud分散式微服務架構JavaIDE
- Java與C語言的區別?JavaC語言
- 27、EJB與JAVA BEAN的區別?JavaBean
- Java泛型T與?的區別Java泛型
- java-----instanceof與getClass的區別Java
- 淺談C#中重寫和隱藏的區別C#
- java程式設計——從jvm角度看懂類初始化、方法重寫、過載Java程式設計JVM
- Java之String的equals與contentEquals區別Java
- Java中介面與繼承的區別Java繼承
- Java面試題 equals()與"=="的區別?Java面試題
- Java中類與物件的關係與區別Java物件
- Java中replace與replaceAll區別Java
- Java基礎-- ==號與equals()方法的區別Java
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- Java運算子>>與>>>區別詳解Java
- java方法的神奇修改(重寫)Java
- 轉載_Linux程式與執行緒的區別Linux執行緒
- 關於繼承、重寫、過載的易混淆之處的總結繼承
- java字串“==”與“equals”的差異及與c#的區別Java字串C#
- Java中Statement與PreparedStatement與CallableStatement之間的區別 - javarevisitedJava
- ??與?:的區別