上一更新中,我們提到了在子類中可以重寫父類的方法,重寫後,子類的對象不能調用父類的此方法,但是可以在子類中調用,那麼調用的時候就需要使用super關鍵詞。
super關鍵詞只可以用在有繼承關係的子類中,有兩個作用:調用父類的方法、調用父類的構造器。
首先看調用父類的方法:
class Bird{
public void fly(){
System.out.println("父類的fly方法");
}
}
class Ostrich extends Bird{
public void fly(){
super.fly();//調用父類的fly方法
System.out.println("子類的fly方法");
}
}
class LittleBird extends Bird{}
public class Test05 {
public static void main(String[] args) {
Ostrich ostrich = new Ostrich();
ostrich.fly();
//父類的fly方法
//子類的fly方法
}
}
那麼怎麼調用父類的構造器呢?
class Bird{
public Bird(){
System.out.println("父類的fly構造方法");
}
public Bird(String name){
System.out.println("父類的fly構造方法"+name);
}
}
class Ostrich extends Bird{
public Ostrich(){
super("test");
System.out.println("子類的fly構造方法");
}
}
class LittleBird extends Bird{}
public class Test05 {
public static void main(String[] args) {
Ostrich ostrich = new Ostrich();
//父類的fly構造方法test
//子類的fly構造方法
}
}
語法很簡單,有一些注意點:
super關鍵詞不能出現在static修飾的方法中;
無法訪問到父類的私有內容;
super調用父類構造器必須在第一行;
如果有顯示的調用父類的構造器的,則顯示調用,否則系統會默認調用無參的構造器,如果父類沒有午餐構造器,則會報編譯錯誤,需要顯示的調用父類的構造器,而且,父類的構造器的調用是上朔的,一直上朔到Java.lang.Object。