最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java關(guān)鍵字super超詳細(xì)解釋

 更新時(shí)間:2023年11月17日 11:10:33   作者:Nianf  
在Java中super是一個(gè)關(guān)鍵字,用于訪問(wèn)父類中的屬性、方法或構(gòu)造函數(shù),這篇文章主要給大家介紹了關(guān)于Java關(guān)鍵字super超詳細(xì)解釋的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言(廢話文學(xué))

又是看了一大堆文字介紹,非常系統(tǒng)和官方,理解要費(fèi)半天勁,所以總結(jié)一下super它到底有啥用,還有代碼演示也會(huì)放出來(lái),這里使用的IDE為idea

前言(定義)

還是先官方一下

在java中,super表示超類(就是我們俗稱的父類),當(dāng)子類需要引用父類的字段時(shí),我們就可以使用super.FieldName.
 

因此,本文就將從構(gòu)造函數(shù),公有成員函數(shù),公有成員變量來(lái)分別演示super的作用,因?yàn)閜rivate私有成員是只允許自己使用的,所以這里也可以看出,super在繼承關(guān)系中,對(duì)公有字段起作用。

super()之構(gòu)造方法

如果父類(超類)沒(méi)有默認(rèn)的構(gòu)造方法,子類就必須顯式調(diào)用super(),并且必須使用父類中的某個(gè)構(gòu)造方法的參數(shù)。

什么意思呢?
就是有一個(gè)父類Parent,子類Son,如果我們?cè)赑arent中定義了構(gòu)造函數(shù),那么在繼承父類的子類中就必須書寫父類的構(gòu)造函數(shù)。那么此時(shí)就需要將super()寫在子類構(gòu)造方法中。
如果父類中沒(méi)有定義構(gòu)造方法,那么編譯器會(huì)默認(rèn)是public Parent(){}就是空的,此時(shí)在子類中不書寫super也不會(huì)報(bào)錯(cuò),因?yàn)榫幾g器默認(rèn)生成子類構(gòu)造方法為空,super()就默認(rèn)是隱藏的。
就是構(gòu)造函數(shù)必須有super(),(開個(gè)玩笑:你說(shuō)那我看到的有的咋沒(méi)有,不是沒(méi)有,只是只有聰明人能看見嘿嘿嘿。)如果子類中沒(méi)有super(),那是因?yàn)榫幾g器替你干了這個(gè)活,它隱藏了super()這個(gè)默認(rèn)的無(wú)參構(gòu)造方法,算是隱式調(diào)用。
注意顯式二字。

來(lái)了來(lái)了,代碼示例它來(lái)了

父類

public class Parent {
    //public Parent(){}//可以不寫,編譯器會(huì)默認(rèn)是它,空的
    // 為了查看效果,我們把父類無(wú)參構(gòu)造函數(shù)里加個(gè)輸出
    public Parent(){
        System.out.println("This is Parent!");
    }
}

子類

public class Son extends Parent{
    public Son(){//此時(shí)不寫super也不會(huì)報(bào)錯(cuò),因?yàn)榫幾g器默認(rèn)是有super(),只不過(guò)隱藏了。
        System.out.println("This is son!");
    }
}

MyMain.java

public class MyMain {
    public static void main(String[] args){
        Son son = new Son();
    }
}

來(lái),讓我們看看效果,會(huì)發(fā)現(xiàn)父類構(gòu)造方法也執(zhí)行了。所以說(shuō)super()意思就是調(diào)用父類的方法,往往我們通過(guò)傳參的方式來(lái)達(dá)到我們所先要的結(jié)果

1

現(xiàn)在修改父類代碼如下

public class Parent {
	public Parent(String name,int id){
	        System.out.println(name+"  "+id);
	    }
}

子類代碼如下

public class Son extends Parent{
    public Son(String name,int id){
        System.out.println("This is son!");
    }
}

MyMain類代碼如下

public class MyMain {
    public static void main(String[] args){
        String name ="Bob";
        int id=12;
        Son son = new Son(name,id);
    }
}

當(dāng)當(dāng)當(dāng),報(bào)錯(cuò)了,為啥,你沒(méi)寫super,因?yàn)槟J(rèn)隱藏super是super(),它沒(méi)有傳入任何參數(shù),就導(dǎo)致子類在繼承父類時(shí),父類構(gòu)造器就無(wú)法應(yīng)用到子類中。

java: 無(wú)法將類 Parent中的構(gòu)造器 Parent應(yīng)用到給定類型;

1

修改子類代碼如下,其它不變,發(fā)現(xiàn)可以運(yùn)行了,因?yàn)閭魅肓薙tring參數(shù)和int參數(shù),與父類一致,所以super()表示子類使用父類構(gòu)造函數(shù),(就是子類重載了父類函數(shù),因?yàn)楹瘮?shù)名和參數(shù)都必須相同),同時(shí)它也可以自己在構(gòu)造函數(shù)中添加其它邏輯:

public class Son extends Parent{
    public Son(String name,int id){
        super(name, id);
        System.out.println("This is son!");
    }
}

1

super()之成員函數(shù)

對(duì)于可繼承的成員函數(shù),如果子類在重寫父類的方法同時(shí)想要調(diào)用(實(shí)現(xiàn))與父類相同的方法,那么就用super.func(obj,obj,…)。與構(gòu)造函數(shù)不同的是,super.func()可以不用放在函數(shù)一開始的位置,而構(gòu)造方法的super()必須放在函數(shù)體中最前面的位置。

來(lái)了來(lái)了,代碼示例它來(lái)了

父類

public class Parent {
    private String name="Pang pang";
    private int id=12;
    private String selfIntro="This is a fat parent";
    public Parent(){}
    public void getName() {
        System.out.println(name);
    }
    public void getId(){
        System.out.println(id);
    }
    public void getSelfIntro() {
        System.out.println(selfIntro);
    }
}

子類

public class Son extends Parent{
    private static String sonIntro="This is Feifei's child";
    public Son(){System.out.println("This is Son:");}

    @Override
    public void getSelfIntro() {
        System.out.println(sonIntro);
        System.out.println("I want to see my parents' introduction: ");
        super.getSelfIntro();//可寫可不寫,只是看子類想不想調(diào)用它,它可以放在任何想調(diào)用的位置,返回的是父類的介紹
        //如果子類想調(diào)用卻不寫super的話就會(huì)報(bào)錯(cuò)
    }
}

主類

public class MyMain {
    public static void main(String[] args){
        //從子類讀取信息
        Son son = new Son();
        son.getSelfIntro();
    }
}

結(jié)果展示

1

看到這,你一定想問(wèn),那要是一個(gè)有參數(shù)的成員函數(shù)咋個(gè)整呢,是啊,咋個(gè)整呢。其實(shí)你會(huì)發(fā)現(xiàn),需要傳參的一般情況下不會(huì)再調(diào)用super,因?yàn)樽宇悆?yōu)先原則會(huì)覆蓋掉父類的數(shù)據(jù),比如下面來(lái)演示一下。當(dāng)然有的參數(shù)不影響的情況下,想要調(diào)用父類的含參成員函數(shù)還是可以調(diào)用super的

父類

public class Parent {
    private String name;
    private int id;
    public Parent(){}

    public void setInfo(String name,int id){
        this.name=name;
        this.id=id;
    }
    public void getInfo(){
        System.out.println(name+"  "+id);
    }
}

子類

public class Son extends Parent{
    private String name;
    private int id;
    public Son(){}
    @Override
    public void setInfo(String name,int id){
        super.setInfo(name,id);//將值傳遞給父類
        this.name=name;
        this.id=id;
    }
    @Override
    public void getInfo(){//打印信息
        System.out.println("This is parents' information:");
        super.getInfo();
        System.out.println("This is son's information: ");
        System.out.println(name+"  "+id);
    }
}

主類

public class MyMain {
    public static void main(String[] args){
        //由于子類優(yōu)先原則,會(huì)將所有的值由子類傳遞給父類,順便演示一下子類優(yōu)先原則
        //設(shè)置父類信息
        Parent parent=new Parent();
        String pName="Pang pang";
        int pId = 11;
        parent.setInfo(pName,pId);
        System.out.println("This is first parent:");
        parent.getInfo();//打印出來(lái)看看,此時(shí)還是很正常的父類的值
        //設(shè)置子類信息,會(huì)發(fā)現(xiàn)父類信息失效了
        Son son = new Son();
        String sName = "Fei fei";
        int sId = 15;
        son.setInfo(sName,sId);
        son.getInfo();
    }
}

1

super()之成員變量

通過(guò)super.變量名就可以在子類中訪問(wèn)父類的成員變量,但是只有protected和public的成員變量可以被訪問(wèn),而private的變量子類是訪問(wèn)不到的。

父類

public class Parent {
    private String inf1 = "Parent: stupid!";
    protected String inf2 = "Parent: Kids!";
    public String inf3 = "Parent: eat!";

}

子類

public class Son extends Parent{
    private String inf1;
    protected String inf2;
    public String inf3;
    public Son(){}
    public void setInfo(String inf1,String inf2,String inf3){
        this.inf1=inf1;
        this.inf2=inf2;
        this.inf3=inf3;
    }
    public void getInfo(){//打印信息
        System.out.println("This is son's information: ");
        System.out.println(inf1);
        System.out.println(inf2);
        System.out.println(inf3);
        System.out.println("This is parents' information:");
        //System.out.println(super.inf1);
        System.out.println(super.inf2);
        System.out.println(super.inf3);
    }
}

主類

public class MyMain {
    public static void main(String[] args){
        //設(shè)置子類信息
        Son son = new Son();
        String ss1 = "Son: mom!";
        String ss2 = "SOn: sorry!";
        String ss3 = "Son: play!";
        son.setInfo(ss1,ss2,ss3);
        son.getInfo();

    }
}

運(yùn)行結(jié)果

1

如果調(diào)用了private變量時(shí)會(huì)報(bào)錯(cuò)的,如下圖

1

總結(jié)

到此這篇關(guān)于Java關(guān)鍵字super超詳細(xì)解釋的文章就介紹到這了,更多相關(guān)Java關(guān)鍵字super內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于MyBatis的parameterType傳入?yún)?shù)類型

    基于MyBatis的parameterType傳入?yún)?shù)類型

    這篇文章主要介紹了基于MyBatis的parameterType傳入?yún)?shù)類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行修改url操作

    jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行修改url操作

    這篇文章主要為大家詳細(xì)介紹了jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行修改url操作,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能

    Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能

    今天小編就為大家分享一篇關(guān)于Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • java中BeanUtils.copyProperties的用法(超詳細(xì))

    java中BeanUtils.copyProperties的用法(超詳細(xì))

    本文介紹了BeanUtils.copyProperties()方法的使用,包括其功能、用法、注意事項(xiàng)和示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • CountDownLatch同步工具類使用詳解

    CountDownLatch同步工具類使用詳解

    這篇文章主要為大家詳細(xì)介紹了CountDownLatch的使用說(shuō)明,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Mybatis Mapper接口和xml綁定的多種方式、內(nèi)部實(shí)現(xiàn)原理和過(guò)程解析

    Mybatis Mapper接口和xml綁定的多種方式、內(nèi)部實(shí)現(xiàn)原理和過(guò)程解析

    在Mybatis中,我們需要?jiǎng)?chuàng)建一個(gè)與實(shí)體類對(duì)應(yīng)的Mapper接口,然后在該接口上添加方法,這些方法對(duì)應(yīng)著SQL語(yǔ)句,這篇文章主要介紹了Mybatis Mapper接口和xml綁定的多種方式、內(nèi)部實(shí)現(xiàn)原理和過(guò)程,需要的朋友可以參考下
    2023-11-11
  • SpringBoot注解梳理(小結(jié))

    SpringBoot注解梳理(小結(jié))

    這篇文章主要介紹了SpringBoot注解梳理(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java移位運(yùn)算符詳解實(shí)例(小結(jié))

    Java移位運(yùn)算符詳解實(shí)例(小結(jié))

    這篇文章主要介紹了Java移位運(yùn)算符詳解實(shí)例(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Boot 2結(jié)合Spring security + JWT實(shí)現(xiàn)微信小程序登錄

    Spring Boot 2結(jié)合Spring security + JWT實(shí)現(xiàn)微信小程序登錄

    這篇文章主要介紹了Spring Boot 2結(jié)合Spring security + JWT實(shí)現(xiàn)微信小程序登錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java中如何使用Redis GEO測(cè)算經(jīng)緯度距離

    Java中如何使用Redis GEO測(cè)算經(jīng)緯度距離

    GEO也是Redis中提供的一種數(shù)據(jù)類型,可以將其理解成ZSet有序集合類型,本文給大家介紹Java-使用Redis GEO測(cè)算經(jīng)緯度距離,感興趣的朋友一起看看吧
    2023-11-11

最新評(píng)論

建瓯市| 常山县| 天等县| 白水县| 绥阳县| 拉萨市| 正定县| 黔江区| 黔西县| 西盟| 黄梅县| 黔西县| 古浪县| 高邮市| 洛浦县| 宁波市| 靖州| 新邵县| 库伦旗| 寿宁县| 肇源县| 怀柔区| 西丰县| 炎陵县| 武夷山市| 鹤山市| 化州市| 十堰市| 黄冈市| 曲靖市| 吉木乃县| 乐都县| 故城县| 阳原县| 牟定县| 尉氏县| 奉新县| 临夏县| 平武县| 侯马市| 呼玛县|