現(xiàn)在有Person類Consumer類(繼承Person類)和Test類,需求:實例化Consumer虐秦,并給username屬性賦值
package super關鍵字;
public class Person {
protected String username;//protected 子類可以訪問到
public Person(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Person() {
System.out.println("Person()");
}
public void walk() {
System.out.println("person is walking.....");
}
}
package super關鍵字;
public class Consumer extends Person {//這就表達繼承
//private String username;
public Consumer() {
System.out.println("Consumer()");
}
public Consumer(String username) {
this.setUsername(username);
}
@Override
public void walk() {
super.walk();
System.out.println("Consumer is walking....");
System.out.println("Boss is dancing....");
}
}
package super關鍵字;
public class Test {
public static void main(String[] args) {
//實例化Consumer报咳,并給username屬性賦值
Consumer c = new Consumer("zhangsan");//第二種
// c.setUsername("zhangsan");//第一種
System.out.println(c.getUsername());
}
}
第三種方法:
package super關鍵字;
public class Consumer extends Person {//這就表達繼承
//private String username;
public Consumer() {
super();//這里有沒有這個super()效果是一樣的袖裕,因為子類實例化時一定是先實例化其父類璧微,然后才實例化子類摹菠。
System.out.println("Consumer()");
}
// public Consumer() {
// super();
// }
public Consumer(String username) {
// this.setUsername(username);
//可以調用父類構造器:實現(xiàn)給username屬性賦值的目的
// super(username);//調用父類構造器 使用super關鍵字不但可以訪問父類構造器還可以訪問父類屬性父類行為
super.username = username;//super關鍵字 可以訪問父類的非私有屬性
super.walk();
}
@Override
public void walk() {
super.walk();
System.out.println("Consumer is walking....");
System.out.println("Boss is dancing....");
}
}
總結:
super關鍵字作用以及注意事項:
- super可以調用父類構造方法
- 可以調用父類中子類可以訪問的屬性
- 可以調用父類中子類可以訪問的方法
- super使用時,在同一個構造器中super()和this()不能同時出現(xiàn)
- super(),調用父類構造方法眼耀,代碼必須出現(xiàn)在第一行宽气;
拓展:
super和this關鍵字的區(qū)別肠缨?
-
super()
- 作用:調用父類的構造器
- 只能出現(xiàn)在子類的構造器中逆趋,且必須是第一行
- super()中的參數(shù),決定了調用父類哪個構造器
- 如果子類構造器中沒有出現(xiàn)super晒奕,那么編譯器會默認加上super()闻书,即調用父類的空構造器,如果父類沒有空構造器脑慧,編譯器提示錯誤魄眉。
-
this()
- 作用:調用本類的構造器
- 只能寫在構造器的第一行
在同一個構造器中super()和this()不能同時出現(xiàn)
-
super.
- 指向父類的引用。
- 通過關鍵字super我們可以指定子類在構造時調用父類的哪個構造器闷袒,達到先實例化父類然后實例化子類的目的坑律。
- 子類的構造器默認的調用父類無參構造器,即子類構造器中沒有用super指明調用父類哪個構造器的話囊骤,實際上編譯器會自動的在子類構造器第一行加入代碼super( );
-
this.
- 指向本類的引用晃择。
- 我們知道子類在實例化時必須調用父類的構造器,實際上有的子類構造器也可以先調用本類的其他構造器也物,然后再通過那個構造器調用父類的構造器
- 無論是調用父類的構造器還是子類的構造器宫屠,最終都是找到最頂級的父類自上而下的實例化。只要中間環(huán)節(jié)有一個構造器沒找到滑蚯,這個子類就無法完成實例化激况。
子類實例化的過程
- 使用默認的構造器
- 在子類中的創(chuàng)建構造器
- 在子類中創(chuàng)建構造器時,必須調用父類的構造器
- 子類可以在自己的構造器中使用super關鍵字來調用父類的構造器
- 如果使用super關鍵字調用父類構造器膘魄,必須寫在該子類構造器的第一行
- 如調用的是父類中無參的構造器乌逐,則可以不寫super( )
- 如果子類中調用了父類無參的構造器,而父類中沒有無參構造器則系統(tǒng)編譯出錯
以上就是我關于 Java-Super關鍵字 知識點的整理與總結的全部內容创葡,另附源碼
分割線
博主為咯學編程:父母不同意學編程浙踢,現(xiàn)已斷絕關系;戀人不同意學編程,現(xiàn)已分手;親戚不同意學編程灿渴,現(xiàn)已斷絕來往;老板不同意學編程,現(xiàn)已失業(yè)三十年洛波。。骚露。蹬挤。。棘幸。如果此博文有幫到你歡迎打賞焰扳,金額不限。。吨悍。