<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【詳解】java中 super關(guān)鍵字的作用

          共 5563字,需瀏覽 12分鐘

           ·

          2024-07-15 10:32

          ????最新2024IDEA永久激活(支持全家桶)????


          關(guān)注上面公眾號回復(fù)“激活碼”,獲取最新永久激活碼

          1. 引言

          在面向?qū)ο缶幊讨?,繼承是一個(gè)常見的概念。當(dāng)一個(gè)類繼承自另一個(gè)類時(shí),它會繼承父類的屬性和方法,并可以在此基礎(chǔ)上進(jìn)行擴(kuò)展。在Java中,使用關(guān)鍵字super來調(diào)用父類的構(gòu)造方法、成員變量和方法。本文將詳細(xì)介紹super()方法在Java中的用法和注意事項(xiàng)。

          2. 調(diào)用父類的構(gòu)造方法

          子類的構(gòu)造方法默認(rèn)會調(diào)用父類的無參構(gòu)造方法是因?yàn)樽宇愒诶^承父類時(shí),需要先實(shí)例化父類的成員變量和初始化父類的屬性。如果子類沒有顯式地調(diào)用父類的構(gòu)造方法,編譯器會自動在子類的構(gòu)造方法中插入super()語句來調(diào)用父類的無參構(gòu)造方法。

          然而,如果父類沒有無參構(gòu)造方法,或者需要調(diào)用其他的父類構(gòu)造方法,就可以使用super()方法來顯式調(diào)用指定的父類構(gòu)造方法。使用super()方法調(diào)用父類構(gòu)造方法的語法是在子類的構(gòu)造方法中使用super關(guān)鍵字后跟括號,括號內(nèi)可以傳遞相應(yīng)的參數(shù)給父類構(gòu)造方法。

          下面是一個(gè)示例代碼,演示了如何使用super()方法來調(diào)用父類構(gòu)造方法:

          public classParent{
          privateString name;

          publicParent(){
          System.out.println("Parent類的無參構(gòu)造方法被調(diào)用");
          }

          publicParent(String name){
          this.name = name;
          System.out.println("Parent類的有參構(gòu)造方法被調(diào)用,name值為:"+ name);
          }
          }

          publicclassChildextendsParent{
          publicChild(){
          super();// 調(diào)用父類的無參構(gòu)造方法
          System.out.println("Child類的無參構(gòu)造方法被調(diào)用");
          }

          publicChild(String name){
          super(name);// 調(diào)用父類的有參構(gòu)造方法
          System.out.println("Child類的有參構(gòu)造方法被調(diào)用,name值為:"+ name);
          }
          }

          publicclassMain{
          publicstaticvoidmain(String[] args){
          Childchild1=newChild();// 輸出:Parent類的無參構(gòu)造方法被調(diào)用 Child類的無參構(gòu)造方法被調(diào)用
          Childchild2=newChild("John");// 輸出:Parent類的有參構(gòu)造方法被調(diào)用,name值為:John Child類的有參構(gòu)造方法被調(diào)用,name值為:John
          }
          }

          在示例代碼中,我們定義了一個(gè)Parent類和一個(gè)繼承自Parent類的Child類。Parent類有一個(gè)無參構(gòu)造方法和一個(gè)有參構(gòu)造方法,Child類分別有一個(gè)無參構(gòu)造方法和一個(gè)有參構(gòu)造方法。在Child類的構(gòu)造方法中使用super()方法來調(diào)用指定的父類構(gòu)造方法。在Main類中創(chuàng)建Child對象時(shí),可以看到父類構(gòu)造方法和子類構(gòu)造方法的調(diào)用順序和輸出結(jié)果。

          通過使用super()方法來調(diào)用父類構(gòu)造方法,我們可以在子類中靈活地初始化父類的成員變量和屬性,并確保父類先于子類進(jìn)行實(shí)例化。這樣可以有效地繼承和擴(kuò)展父類的功能。

          3. 實(shí)現(xiàn)構(gòu)造方法的重載

          子類構(gòu)造方法重載的概念是指在子類中可以定義多個(gè)具有不同參數(shù)列表的構(gòu)造方法。子類構(gòu)造方法重載的作用是可以根據(jù)不同的情況選擇不同的構(gòu)造方法來初始化子類自己的成員變量,并調(diào)用父類的構(gòu)造方法來初始化父類的成員變量和屬性。

          通過在子類中定義多個(gè)構(gòu)造方法,可以根據(jù)不同的需求來創(chuàng)建子類對象,而不需要在每次創(chuàng)建對象時(shí)都傳遞相同的參數(shù)。這樣可以提高代碼的靈活性和復(fù)用性。

          下面是一個(gè)示例代碼,演示了如何使用super()方法實(shí)現(xiàn)構(gòu)造方法的重載:

          public classParent{
          privateString name;
          privateint age;

          publicParent(){
          System.out.println("Parent類的無參構(gòu)造方法被調(diào)用");
          }

          publicParent(String name){
          this.name = name;
          System.out.println("Parent類的有參構(gòu)造方法1被調(diào)用,name值為:"+ name);
          }

          publicParent(String name, int age){
          this.name = name;
          this.age = age;
          System.out.println("Parent類的有參構(gòu)造方法2被調(diào)用,name值為:"+ name +",age值為:"+ age);
          }
          }

          publicclassChildextendsParent{
          privateString school;

          publicChild(){
          super();// 調(diào)用父類的無參構(gòu)造方法
          System.out.println("Child類的無參構(gòu)造方法被調(diào)用");
          }

          publicChild(String name){
          super(name);// 調(diào)用父類的有參構(gòu)造方法1
          System.out.println("Child類的有參構(gòu)造方法1被調(diào)用,name值為:"+ name);
          }

          publicChild(String name, int age, String school){
          super(name, age);// 調(diào)用父類的有參構(gòu)造方法2
          this.school = school;
          System.out.println("Child類的有參構(gòu)造方法2被調(diào)用,name值為:"+ name +",age值為:"+ age +",school值為:"+ school);
          }
          }

          publicclassMain{
          publicstaticvoidmain(String[] args){
          Childchild1=newChild();// 輸出:Parent類的無參構(gòu)造方法被調(diào)用 Child類的無參構(gòu)造方法被調(diào)用
          Childchild2=newChild("John");// 輸出:Parent類的有參構(gòu)造方法1被調(diào)用,name值為:John Child類的有參構(gòu)造方法1被調(diào)用,name值為:John
          Childchild3=newChild("Tom",10,"ABC School");// 輸出:Parent類的有參構(gòu)造方法2被調(diào)用,name值為:Tom,age值為:10 Child類的有參構(gòu)造方法2被調(diào)用,name值為:Tom,age值為:10,school值為:ABC School
          }
          }

          在示例代碼中,我們定義了一個(gè)Parent類和繼承自Parent類的Child類。Parent類有三個(gè)構(gòu)造方法,分別是無參構(gòu)造方法、有參構(gòu)造方法1和有參構(gòu)造方法2。Child類定義了三個(gè)構(gòu)造方法,分別是無參構(gòu)造方法、有參構(gòu)造方法1和有參構(gòu)造方法2。

          在Child類的構(gòu)造方法中使用super()方法來調(diào)用指定的父類構(gòu)造方法。根據(jù)調(diào)用的構(gòu)造方法的不同,會選擇不同的父類構(gòu)造方法來初始化父類的成員變量和屬性。在Main類中創(chuàng)建Child對象時(shí),可以看到不同構(gòu)造方法的調(diào)用順序和輸出結(jié)果。

          通過在子類中實(shí)現(xiàn)構(gòu)造方法的重載,并使用super()方法來調(diào)用父類構(gòu)造方法,我們可以根據(jù)不同的需求來創(chuàng)建子類對象,實(shí)現(xiàn)更靈活的對象初始化。這樣可以提高代碼的復(fù)用性和可讀性。

          4. 解決成員變量和方法的命名沖突

          當(dāng)子類和父類擁有同名的成員變量或方法時(shí),使用super關(guān)鍵字可以明確指定調(diào)用的是父類的成員還是子類的成員。super關(guān)鍵字可以用于訪問父類的成員變量、成員方法和構(gòu)造方法。

          使用super關(guān)鍵字的主要作用如下:

          訪問父類的成員變量:當(dāng)子類和父類擁有同名的成員變量時(shí),使用super關(guān)鍵字可以訪問父類的成員變量,避免命名沖突。調(diào)用父類的成員方法:當(dāng)子類和父類擁有同名的成員方法時(shí),使用super關(guān)鍵字可以調(diào)用父類的成員方法,實(shí)現(xiàn)對父類方法的重用。調(diào)用父類的構(gòu)造方法:當(dāng)子類需要初始化父類的成員變量時(shí),使用super關(guān)鍵字可以調(diào)用父類的構(gòu)造方法。下面是一個(gè)示例代碼,演示了如何使用super關(guān)鍵字訪問父類中的成員變量和方法:

          public classParent{
          Stringname="Parent";

          publicvoiddisplay(){
          System.out.println("This is the Parent class.");
          }
          }

          publicclassChildextendsParent{
          Stringname="Child";

          publicvoiddisplay(){
          System.out.println("This is the Child class.");
          }

          publicvoidprint(){
          System.out.println("Parent name: "+super.name);
          System.out.println("Child name: "+this.name);
          super.display();
          this.display();
          }
          }

          publicclassMain{
          publicstaticvoidmain(String[] args){
          Childchild=newChild();
                  child.print();
          }
          }

          在示例代碼中,我們定義了一個(gè)Parent類和繼承自Parent類的Child類。Parent類和Child類都有一個(gè)名為name的成員變量,并且都有一個(gè)名為display的成員方法。

          在Child類的print方法中,我們使用super關(guān)鍵字來訪問父類的成員變量name和父類的成員方法display。通過super.name和super.display(),我們可以明確地指定調(diào)用的是父類的成員。

          在Main類中創(chuàng)建Child對象時(shí),調(diào)用child.print()方法,可以看到輸出結(jié)果:

          Parent name: Parent
          Child name: Child
          This is the Parent class.
          This is the Child class.

          通過使用super關(guān)鍵字,我們可以區(qū)分子類和父類的成員變量和方法,避免命名沖突,并且可以靈活地調(diào)用父類的成員。這樣可以提高代碼的可讀性和可維護(hù)性。

          5. super()方法的注意事項(xiàng)

          5.1. super()方法必須在子類的構(gòu)造方法的第一行調(diào)用:在子類的構(gòu)造方法中,如果需要調(diào)用父類的構(gòu)造方法,必須使用super()方法,并且該語句必須放在子類構(gòu)造方法的第一行。這是因?yàn)樽宇悓ο笤趧?chuàng)建時(shí),需要先完成父類對象的初始化,然后再進(jìn)行子類對象的初始化。因此,為了保證先調(diào)用父類的構(gòu)造方法,super()方法必須在子類構(gòu)造方法的第一行調(diào)用。

          5.2. super()方法只能調(diào)用一次:在子類的構(gòu)造方法中,只能使用一次super()方法來調(diào)用父類的構(gòu)造方法。這是因?yàn)楦割惖臉?gòu)造方法只會被調(diào)用一次,而且子類的構(gòu)造方法中必須要有對父類構(gòu)造方法的調(diào)用,以確保父類對象的正確初始化。如果在子類的構(gòu)造方法中多次調(diào)用super()方法,會導(dǎo)致父類的構(gòu)造方法被多次調(diào)用,從而引發(fā)錯(cuò)誤。

          5.3. 編譯器會自動插入super()調(diào)用:如果子類的構(gòu)造方法沒有顯式地調(diào)用super()方法,編譯器會在子類構(gòu)造方法的第一行自動插入super()語句,以調(diào)用父類的無參構(gòu)造方法。這是因?yàn)椋绻宇悰]有顯式地調(diào)用super()方法,那么編譯器會默認(rèn)認(rèn)為子類構(gòu)造方法需要調(diào)用父類的無參構(gòu)造方法。如果父類沒有無參構(gòu)造方法,或者需要調(diào)用父類的帶參構(gòu)造方法,那么子類的構(gòu)造方法必須顯式地調(diào)用super()方法,并傳入相應(yīng)的參數(shù)。

          6. 結(jié)論

          簡要總結(jié)super()方法的作用和用法。強(qiáng)調(diào)super()方法在面向?qū)ο缶幊讨械闹匾?。通過本文的介紹,我們了解了super()方法在Java中的作用和用法。它可以調(diào)用父類的構(gòu)造方法、成員變量和方法,實(shí)現(xiàn)構(gòu)造方法的重載,解決成員變量和方法的命名沖突。在面向?qū)ο缶幊讨?,使用super()方法非常重要,它能夠幫助我們構(gòu)建出更加靈活和健壯的程序。

          瀏覽 49
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色直播免费在线 | 日逼日韩| 免费播放片色情A片 | 日韩免费黄色电影 | 五月婷色亚洲 |