-
方法重寫
鎖定
- 中文名
- 方法重寫
- 外文名
- overiding method
- 領 域
- Java
- 又 稱
- 方法覆蓋
方法重寫方法重寫概念
方法的重寫是指兩個方法的返回值、方法名、參數的類型和個數相同(子類重寫父類的方法)。
方法的重寫,不能發生在同類中,只能發生在子類中。
若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。 如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
方法重寫的權限:子類中的權限大於或等於父類的權限,(修飾符高低:private<默認修飾符<protected<public)
特殊情況:子類不能重寫父類被聲明為private權限的方法
方法重寫注意事項
方法重寫方法的隱藏
如果子類中定義的靜態方法(類方法)與父類中靜態方法(類方法)具有相同的返回值類型、方法名、方法參數的類型和個數完全相同,則稱子類中的該方法“隱藏”了父類中的該方法。當子類創建的對象調用該隱藏方法時,默認調用的是子類中的方法。
方法重寫方法重寫與方法重載區別
方法的重載是方法的參數個數或類型不同,方法名相同。
方法重寫是要注意權限的問題,子類中的權限不能小於父類的權限,當父類的權限為private時,子類無法繼承。也就無法產生所謂的重寫。(修飾符高低:private<默認修飾符<public)
方法重寫特性
關於方法重寫的一些特性:
2.子類拋出的異常下不能超過父類相應方法拋出的異常(子類異常不能大於父類異常)
3.子類方法的訪問級別不能低於父類相應方法的訪問級別(子類訪問級別不能低於父類訪問級別)
方法重寫示例
public class Father { public static String name1 ="父類的類變量"; public String name2 ="父類的實例變量名"; //定義一個類方法 public static void classMethod(){ System.out.println("Father父類通過類方法調用它的類變量:"+name1); } //定義一個實例方法 public void instanceMethod(){ System.out.println("Father父類通過實例方法調用它的實例變量:"+name2); } } public class Son extends Father{ public static String name1 ="子類的類變量"; public String name2 ="子類的實例變量"; //定義一個類方法 public static void classMethod(){ System.out.println("Son子類通過類方法調用它的類變量:"+name1); } //定義一個實例方法 public void instanceMethod(){ System.out.println("Son子類通過實例方法調用它的實例變量:"+name2); } } public class Test { public static void main(String[] args) { System.out.println("\n-----------------------------------------"); Son mySon1 =new Son(); Father myFather1=mySon1;//對象類型轉換的上轉型 myFather1.instanceMethod(); System.out.println("\n------------------------------------"); Father myFather2=new Father(); if(myFather2 instanceof Son){ //隱式對象類型轉換 Son mySon2 =(Son) myFather2; //調用myFather對象的實例方法 mySon2.instanceMethod(); } } }