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