JAVA入门级教学之(super关键字)
目錄
?
?
JAVA入門級教學之(super關鍵字)
1.super關鍵字用在構造方法中:
2.語法規則:
3.注意:super();的調用只能放在構造方法的第一行,和this();的調用規則一樣
4.通過子類的構造方法去調用父類的構造方法
5.super();調用了父類中的構造方法,但是不會創建父類對象 ,只是為了給當前子類對象中的父類型特征賦值
6.為什么super();不會創建對象呢?
7.因此:構造方法執行,不一定創建對象【這個的意思指的是super關鍵字的意思】
8.父類的構造方法并不會被子類繼承,但是可以被子類去調用
?
JAVA入門級教學之(super關鍵字)
?
?
1.super關鍵字用在構造方法中:
? ? ? ? 語法:
?? ? ? ?super(實參);【通過子類的構造方法去調用父類的構造方法】
? ? ? ? this(實參);【通過一個構造方法去調用另一個構造方法,實現代碼重用,調用當前對象的構造方法】
2.語法規則:
?
一個構造方法第一行如果沒有this();也沒有顯示的去調用super();
系統會默認調用super();并且是一級一級往父類去調用
3.注意:super();的調用只能放在構造方法的第一行,和this();的調用規則一樣
? ? ? ? ? ??
? ? ? ? super()和this()不能共存在同一個構造函數內
? ? ? ? 構造方法的第一行如果什么都不寫的話就會默認調用父類的無參數構造方法【super();】
?
4.通過子類的構造方法去調用父類的構造方法
?
作用是:給當前子類對象中的父類型特征賦值
? super(值1,值2.....);
? ??
5.super();調用了父類中的構造方法,但是不會創建父類對象 ,只是為了給當前子類對象中的父類型特征賦值
?
?
6.為什么super();不會創建對象呢?
按道理來說,一個類我們只會給它實現一個對象,但是如果繼承過來的東西也實例化的話,相當于實例化了Object,實例化Account,
實例化當前對象,一共有三個對象,這樣會導致混亂
7.因此:構造方法執行,不一定創建對象【這個的意思指的是super關鍵字的意思】
?
8.父類的構造方法并不會被子類繼承,但是可以被子類去調用
?
補充:
1:super是一個關鍵字,全部小寫
2:super和this對比學習:
this:
this 能出現在實例方法和構造方法中
this 的語法是 this. 或者 this()
this 不能使用在靜態方法中
this 大部分情況下可以省略
this 在什么情況下不能省略呢?
? ? ? ?在局部變量和實例變量的時候不能省略
? ? ? public void serName(String name){
? ? ? this.name=name;? ? ??
}
this() 只能出現在構造方法的第一行,通過當前的構造方法去調用本類中的其它構造方法,目的是:代碼復用
?
?
super:
super 能出現在實例方法和構造方法中
super 的語法是 super. 或者 super()
super 不能使用在靜態方法中
super 大部分情況下可以省略
super 在什么情況下不能省略呢?
? ? ?
super() 只能出現在構造方法的第一行,通過當前的構造方法去調用父類中的其它構造方法,目的是:創建子類對象的時候,先初始化父類型特征
?
?
代碼演示:
public class Teat01 {public static void main(String[] args){new B();} }class A{public A(){System.out.println("這是A類的無參構造方法");} }class B extends A{public B(){System.out.println("這是B類的無參構造方法");} }運行結果:
運行結果分析:
創建對象后,先掉用父類,再調用子類
?
3:super()
? ? ? 表示通過子類的構造方法調用父類的構造方法
? ? ??模擬的是現實世界中,要是想要有兒子,先需要有父親的存在
?
4:一個類如果沒有手動添加任何構造方法,系統會默認提供一個無參構造方法
? ? ? 一個類如果手動添加一個構造方法,那么系統將不會提供無參構造方法
?
代碼演示:
public class Teat01 {public static void main(String[] args){new B();} }class A{ // public A(){ // System.out.println("這是A類的無參構造方法"); // }public A(int i){} }class B extends A{public B(){System.out.println("這是B類的無參構造方法");} }演示結果:
?
5:重要結論:
當一個構造方法的第一行:
既沒有明顯寫出this() 又沒有明顯寫出super()?
系統會默認添加super()
表示通過當前子類的構造方法調用父類的無參構造方法,所以必須保證父類的無參構造方法是存在的。
因此一般都會顯式添加類的無參構造方法
?
super()? 和 this () 不能共存
括號中有參數和無參數也不能共存
他們都只出現在構造方法的第一行
有了一個后不能出現第二個
?
在java語言中,不管是new什么對象,最后老祖宗的Object類的無參構造方法一定會執行
由于繼承關系,所有的類都是繼承自一個父類 Object 類,因此Object 類中的無參構造方法一定是最先執行的
?
object 類的無參構造方式處于 “棧”的頂部
?
?
? ?
?
?
?
?
?
?
定義一個?Account類:
package com.lbj.javase15;public class Account extends Object{//這里隱藏調用了Object類private String actno;private double balance;public Account() {//這里即使是缺寫super();系統也會調用Object的無參構造方法去執行System.out.println("無參數構造器");}public Account(String actno, double balance) {this.actno = actno;this.balance = balance;}public String getActno() {return actno;}public void setActno(String actno) {this.actno = actno;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}}?定義一個DebitAccount類 繼承extends Account類:
package com.lbj.javase15; /*** * 1.super關鍵字用在構造方法中:* 語法:super(實參);【通過子類的構造方法去調用父類的構造方法】* this(實參);【通過一個構造方法去調用另一個構造方法,實現代碼重用,調用當前對象的構造方法】* * 2.語法規則:一個構造方法第一行如果沒有this();也沒有顯示的去調用super();* 系統會默認調用super();并且是一級一級往父類去調用* * 3.注意:super();的調用只能放在構造方法的第一行,和this();的調用規則一樣* * super()和this()不能共存在同一個構造函數內* * 構造方法的第一行如果什么都不寫的話就會默認調用父類的無參數構造方法【super();】* * 4.通過子類的構造方法去調用父類的構造方法,作用是:給當前子類對象中的父類型特征賦值* super(值1,值2.....);* * 5.super();調用了父類中的構造方法,但是不會創建父類對象 ,只是為了給當前子類對象中的父類型特征賦值* * 6.為什么super();不會創建對象呢?* 按道理來說,一個類我們只會給它實現一個對象,但是如果繼承過來的東西也實例化的話,相當于實例化了Object,實例化Account,* 實例化當前對象,一共有三個對象,這樣會導致混亂* * 7.因此:構造方法執行,不一定創建對象【這個的意思指的是super關鍵字的意思】* * 8.父類的構造方法并不會被子類繼承,但是可以被子類去調用* * * * * * @author 14811**/ public class DebitAccount extends Account {//獨有屬性private double debit;public DebitAccount(String actno,double balance,double debit) {super(actno,balance);this.debit = debit;}public DebitAccount() {//super("001",1000.0);//這里調用的是父類的有參數的構造函數//報錯super();//單純調用無參構造函數的時候這里即使不寫也會自動存在//報錯super("001",1000.0);}public double getDebit() {return debit;}public void setDebit(double debit) {this.debit = debit;}}定義一個測試類:?
package com.lbj.javase15; /*** * 1.super不是引用類型(this是引用類型,引用的是當前對象),super中存儲的不是內存地址,super指向的不是父類對象* * 2.super代表的是當前子類對象中的父類型特征* * 3.什么時候使用super? * 子類和父類中都有某個數據,* 例如:子類和父類中都有name這個屬性* 如果要在子類中訪問父類中的name屬性,需要使用super關鍵字* * 4.super可以使用在什么地方?* 第一:super可以用在成員方法中,不能用在靜態方法中* 第二:super可以用在構造方法中* * 5.this和super相同,都不能用在靜態上下文中(static)* * * @author 14811**/ public class Test {public static void main(String[] args) {DebitAccount da=new DebitAccount();da.}}?
總結
以上是生活随笔為你收集整理的JAVA入门级教学之(super关键字)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: birt project mysql_e
- 下一篇: 计算机专业网站的开题ppt,.计算机专业