1. 程式人生 > >類的繼承和重寫

類的繼承和重寫

 繼承是java面向物件的三大特徵之一,它的關鍵字是extend。這個單詞的意思其實是“擴充套件”,由此我們可以把繼承理解為一個類去擴充套件另一個類,其中被擴充套件的類稱為父類,實現擴充套件的類叫做子類。在繼承關係中子類會得到父類的所有引數或是方法,此外子類還可以擴充套件自己的引數或方法。

  比如水果類和蘋果類,蘋果類擴充套件了水果類,因此水果類是父類,蘋果類是子類。它的格式是這樣的:

public class friut (){
  System.out.println("這是一個水果類");
}
public class apple extends friut(){
  System.out.pritnln("這是一個蘋果類");
}


  值得注意的是,java中的繼承是單繼承,這裡說的單繼承並不能理解為一個子類只能有一個父類,一個子類可以有多個間接父類,但是直接父類只能有一個,就是說:

public class apple extend friut1,friut2....{
}    //是錯誤的


  說到繼承有一個東西不得不提到,那就是重寫,什麼是重寫?我們來看這樣一個場景:
   有一個bird類,其中定義了一個會飛的方法,再建立一個hen類去繼承bird類,我們都知道母雞屬於鳥類,但是鳥是會飛的,而母雞不會飛,但是又繼承了bird類中的會飛這個方法,顯然是不行的,此時我們就需要改寫bird類中的方法。

public class bird {
public void fly(){
   System.out.println("鳥是會飛的");
}
}

public class henextends bird{
public void fly(){     //重寫父類fly方法
   System.out.println("母雞是不會飛的");
}
public void fly1(){
super.fly();      //用super呼叫父類fly方法
}
public static void main(String[] args) {
hen he=new hen();
he.fly();

he.fly1();

  }

}

上面這個例子就用到了重寫,子類hen 類重寫了父類bird類中fly方法,可以知道子類中的fly方法被覆蓋了。
重寫的時候我們需要注意一下三點:        
 (1).重寫的方法必須和原方法的方法名相同,參型列表相同(包括引數名,順序和型別)       
 (2).子類的訪問訪問許可權應該比父類的大        
 (3).如果父類中的某個方法是pirvate的,那麼子類不能重寫此方法


重寫中還有一個super關鍵字很重要,super 的作用是直接呼叫父類中的方法。在上面我們說到父類中的方法在子類中被重寫了,那麼就無法訪問父類中的原方法,但有些情況下需要用到父類中原方法時就可以用super來呼叫。 在上面的例子中母雞是不會飛的,但是有一天它突然變異了它會飛了,此時我們又改寫了fly方法,這種情況下還是需要呼叫父類中fly方法。                                                                            
                                                                                                            注:參考資料瘋狂java講義(電子工業出版社)