1. 程式人生 > 實用技巧 >21-方法的重寫

21-方法的重寫

1.什麼是方法的重寫(override 或 overwrite)?

  子類繼承父類以後,可以對父類中同名同參數的方法,進行覆蓋操作.

2. 應用:

  重寫以後,當建立子類物件以後,通過子類物件呼叫子父類中的同名同參數的方法時,實際執行的是子類重寫父類的方法。

3.舉例:

 1 class Circle{
 2 
 3   public double findArea(){}//求面積
 4 
 5 }
 6 
 7 class Cylinder extends Circle{
 8 
 9   public double findArea(){}//求表面積
10 
11 }
12 
13 //***************
14
15 class Account{ 16 17   public boolean withdraw(double amt){} 18 19 } 20 21 class CheckAccount extends Account{ 22 23   public boolean withdraw(double amt){} 24 25 }

4.重寫的規則:

方法的宣告: 許可權修飾符 返回值型別 方法名(形參列表) throws 異常的型別{

      //方法體

     }

約定俗稱:子類中的叫重寫的方法,父類中的叫被重寫的方法

  ① 子類重寫的方法的方法名和形參列表

與父類被重寫的方法的方法名和形參列表相同

   ② 子類重寫的方法的許可權修飾符不小於父類被重寫的方法的許可權修飾符

    >特殊情況:子類不能重寫父類中宣告為private許可權的方法

   ③ 返回值型別:

    >父類被重寫的方法的返回值型別是void,則子類重寫的方法的返回值型別只能是void

    >父類被重寫的方法的返回值型別是A型別,則子類重寫的方法的返回值型別可以是A類或A類的子類

    >父類被重寫的方法的返回值型別是基本資料型別(比如:double),則子類重寫的方法的返回值型別必須是相同的基本資料型別(必須也是double)

  ④ 子類重寫的方法丟擲的異常型別不大於

父類被重寫的方法丟擲的異常型別

子類和父類中的同名同參數的方法要麼都宣告為非static的(考慮重寫,要麼都宣告為static的(不是重寫) )。

5.面試題:

區分方法的重寫和過載?

答:

  ① 二者的概念:

  ② 過載和重寫的具體規則

  ③ 過載:不表現為多型性。

重寫:表現為多型性。

過載,是指允許存在多個同名方法,而這些方法的引數不同。編譯器根據方法不同的引數表,對同名方法的名稱做修飾。

   對於編譯器而言,這些同名方法就成了不同的方法。它們的呼叫地址在編譯期就綁定了。

   Java的過載是可以包括父類和子類的,即子類可以過載父類的同名不同引數的方法。

所以:對於過載而言,在方法呼叫之前,編譯器就已經確定了所要呼叫的方法,這稱為“早繫結”或“靜態繫結”;

而對於多型,只等到方法呼叫的那一刻,解釋執行器才會確定所要呼叫的具體方法,這稱為“晚繫結”或“動態繫結”。