3 回答
TA貢獻1795條經驗 獲得超7個贊
要講super就不能不提this,下面從4個角度講解一下super(需要對比的時候拿this對比一下,加深理解)
1. super關鍵字表示超(父)類的意思。this變量代表對象本身。
2. super訪問父類被子類隱藏的變量或覆蓋的方法。當前類如果是從超類繼承而來的,當調用super.XX()就是調用基類版本的XX()方法。其中超類是最近的父類。
3.調用super() 父類構造函數的時候只能調用在子類構造函數的第一行
4.this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this。并且this只和特定的對象關聯,而不和類關聯,同一個類的不同對象有不同的this
例如:
class Person {
protected void print() {
System.out.println("The print() in class Person.");
}
}
public class DemoSuper extends Person {
public DemoSuper(){
super(); //調用父類的構造方法,而且放第一行,如果不寫,系統自動加
}
public void print() {
System.out.println("The print() in class DemoSuper.");
super.print();// 調用父類的方法
}
public static void main(String[] args) {
DemoSuper ds = new DemoSuper();
ds.print();
}
}
TA貢獻1806條經驗 獲得超8個贊
super() 是調用父類的構造函數,你例子中有Bird()和Bird(String name)兩個方法,super()是調用Bird()構造函數,而super(name)是調用Birth(String name)構造函數。注意super() 調用的是對應參數個數和類型相同的父類構造函數。
public Chicken(String name,String crest) {
super(name);
this.name = name;
}
應該重復了吧,super(name)應該就是this.name = name。
TA貢獻1880條經驗 獲得超4個贊
首先告訴你一些概念:
繼承中的構造方法?。?br/>1。子類的構造過程中必須調用父類的構造方法
2.子類可在自己的構造方法中使用super()來調用父類的構造方法
(1)使用this來調用本類的另外的構造方法
(2)如果調用super必須寫在子類構造方法的第一行
3.如果子類的構造方法中沒有顯示的調用父類的構造方法,則系統默認的調用父類的無參的構造方法。
4.如果子類的構造方法中既沒有顯示調用父類的構造方法,而父類中又沒有無參的構造方法,則編譯出錯。
那你這里第一個super()無參的就是調用了上面Bird類的walk() 方法!
super(name)這個有參數就是調用public Bird(String name){
this.name = name; 這個方法!
添加回答
舉報
