欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題

 更新時間:2020年10月20日 10:31:03   作者:zx33699659  
這篇文章主要介紹了關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Java子類在實例化時默認調(diào)用的是父類的無參構(gòu)造函數(shù),不論實例化時調(diào)用的是子類的有參還是無參構(gòu)造函數(shù),

可以參考這篇Java子類實例化總是默認調(diào)用父類的無參構(gòu)造操作

1、當(dāng)父類沒有顯式定義構(gòu)造方法時,

編輯器會默認為此類添加一個隱式無參構(gòu)造函數(shù)。此時子類可以有自己的無參和有參構(gòu)造方法。不論實例化時調(diào)用的是子類的有參還是無參構(gòu)造函數(shù),默認調(diào)用的是父類的無參構(gòu)造函數(shù)。

2、當(dāng)父類有顯式定義無參構(gòu)造方法時,

此時子類也可以有自己的無參和有參構(gòu)造方法。類似于1,同樣默認隱式調(diào)用父類的無參構(gòu)造方法。

3、當(dāng)父類只有顯式定義有參構(gòu)造方法時,

(1)子類定義無參方法會出錯:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor,即隱式父類構(gòu)造函數(shù)Father()未定義, 必須顯式調(diào)用另一個構(gòu)造函數(shù),當(dāng)此時調(diào)用父類的有參構(gòu)造函數(shù)時,使用super(i),這里i是參數(shù),會提示i沒有定義,因為此時是無參構(gòu)造函數(shù),此時要使子類也有無參構(gòu)造函數(shù),只能在子類的無參構(gòu)造函數(shù)中調(diào)用父類的有參構(gòu)造函數(shù),并給父類的有參構(gòu)造函數(shù)賦一個實參;

(2)在子類的有參構(gòu)造函數(shù)中使用super(i)調(diào)用父類的有參構(gòu)造函數(shù)不會出錯,因此若父類只有有參的構(gòu)造方法,子類也只能有有參的構(gòu)造方法,且子類的有參構(gòu)造方法必須顯示調(diào)用父類的有參構(gòu)造方法。

分析:默認都是調(diào)用父類的無參構(gòu)造函數(shù),當(dāng)父類有有參構(gòu)造函數(shù)時,編輯器不會為父類添加無參的構(gòu)造函數(shù),在子類繼承父類時,本來是默認在構(gòu)造函數(shù)第一行都是默認有使用super()調(diào)用父類無參構(gòu)造函數(shù)的,現(xiàn)在父類沒有無參構(gòu)造函數(shù),因此提示顯示調(diào)用另一個構(gòu)造函數(shù)(即有參構(gòu)造函數(shù))。

提醒一點,當(dāng)沒有子類繼承父類時,父類只定義有參構(gòu)造函數(shù)是沒有問題的。

4、當(dāng)父類和子類都有無參和有參構(gòu)造方法時,默認是子類構(gòu)造方法都是調(diào)用父類的無參構(gòu)造方法的,但當(dāng)子類的有參構(gòu)造方法使用super(i)調(diào)用父類的有參構(gòu)造方法時,帶參數(shù)實例化時就不再調(diào)用父類的無參構(gòu)造方法,而是調(diào)用父類的有參構(gòu)造方法,因為是顯示調(diào)用(人為強制的)。

總結(jié):

父類有無參構(gòu)造函數(shù)時(顯示或隱式),子類的有參和無參構(gòu)造函數(shù)都是默認調(diào)用父類的無參構(gòu)造函數(shù);當(dāng)父類只有有參構(gòu)造函數(shù)時,子類可以有有參和無參構(gòu)造函數(shù),子類有參構(gòu)造函數(shù)必須顯式調(diào)用父類的有參構(gòu)造函數(shù),子類無參構(gòu)造函數(shù)也必須顯式調(diào)用父類的有參構(gòu)造函數(shù),但需給父類有參構(gòu)造函數(shù)賦實參。

1中的示例:

package classTest;
class Father1{

}
class Son1 extends Father1{
 public Son1() {
 System.out.println("子類的無參構(gòu)造方法");
 }
 public Son1(int i) {

 System.out.println("子類中有參構(gòu)造方法"+i);
 }
}
public class TestExtend {
public static void main(String[] args) {
 Son1 s = new Son1();
}
}

運行結(jié)果:

子類的無參構(gòu)造方法

2中的示例:

package classTest;


class Father1{
 public Father1() { 
 }
}
class Son1 extends Father1{
 public Son1() {
 System.out.println("子類的無參構(gòu)造方法");
 }
 public Son1(int i) {
 System.out.println("子類中有參構(gòu)造方法"+i);
 }
}
public class TestExtend {
public static void main(String[] args) {
 Son1 s = new Son1();
}
}

運行結(jié)果:

子類的無參構(gòu)造方法

3中的示例(1):

package classTest;
class Father1{

 public Father1(int i) {
 System.out.println("父類中的有參構(gòu)造方法"+i);
 }
}
class Son1 extends Father1{

 public Son1() {
  //下兩行需注釋掉一行
 super(i);//此時會報錯
 super(1);//此時不會報錯,調(diào)用父類構(gòu)造函數(shù),但參數(shù)值是固定的,不能在調(diào)用時傳入其他值。
 System.out.println("子類的無參構(gòu)造方法");
 }
 public Son1(int i) {
   super(i);
 System.out.println("子類中有參構(gòu)造方法"+i);
 }
}
public class TestExtend {
public static void main(String[] args) {
 Son1 s = new Son1();
}
}

結(jié)果:顯示參數(shù)沒有定義

Exception in thread "main" java.lang.Error: Unresolved compilation problem: i cannot be resolved to a variable

3中的示例(2):

package classTest;
class Father1{
 public Father1(int i) {
 System.out.println("父類中的有參構(gòu)造方法"+i);
 }
}
class Son1 extends Father1{
 public Son1(int i) {
   super(i);
 System.out.println("子類中有參構(gòu)造方法"+i);
 }
}
public class TestExtend {
public static void main(String[] args) {
 System.out.println("-----");
 Son1 a = new Son1(5);
}
}

結(jié)果:

-----

父類中的有參構(gòu)造方法5

子類中有參構(gòu)造方法5

4中的示例:

package classTest;
class Father1{
 public Father1() {
 System.out.println("父類的無參構(gòu)造方法");
}
 public Father1(int i) {
 System.out.println("父類中的有參構(gòu)造方法"+i);
 }
}
class Son1 extends Father1{

 public Son1() {
 System.out.println("子類的無參構(gòu)造方法");
 }
 public Son1(int i) {
   super(i);
 System.out.println("子類中有參構(gòu)造方法"+i);
 }
}
public class TestExtend {
public static void main(String[] args) {
 Son1 s = new Son1();
 System.out.println("-----");
 Son1 a = new Son1(5);
}
}

結(jié)果:

父類的無參構(gòu)造方法

子類的無參構(gòu)造方法

-----

父類中的有參構(gòu)造方法5

子類中有參構(gòu)造方法5

以上這篇關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java設(shè)計者模式簡單工廠模式解析

    Java設(shè)計者模式簡單工廠模式解析

    這篇文章主要介紹了Java設(shè)計者模式簡單工廠模式解析,介紹了其簡介,實例以及優(yōu)缺點分析,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 教你代碼中獲取當(dāng)前?JAR?包的存放位置

    教你代碼中獲取當(dāng)前?JAR?包的存放位置

    這篇文章主要介紹了如何獲取當(dāng)前JAR包的存放位置,要獲取當(dāng)前運行的 JAR 包所存放的位置,可以使用 ProtectionDomain 和 CodeSource 類,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • Spring?JPA?find分頁示例詳解

    Spring?JPA?find分頁示例詳解

    這篇文章主要為大家介紹了Spring?JPA?find分頁示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java Swing樹狀組件JTree用法實例詳解

    Java Swing樹狀組件JTree用法實例詳解

    這篇文章主要介紹了Java Swing樹狀組件JTree用法,結(jié)合具體實例形式分析了Swing組件JTree構(gòu)成樹狀列表的節(jié)點設(shè)置與事件響應(yīng),以及自定義圖形節(jié)點的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java爬蟲 信息抓取的實現(xiàn)

    Java爬蟲 信息抓取的實現(xiàn)

    本文主要介紹 Java爬蟲 信息抓取的實現(xiàn),這里詳細介紹了如何實現(xiàn)該方法,并附示例代碼供大家學(xué)習(xí)參考,有興趣的小伙伴可以參考下
    2016-09-09
  • Java基礎(chǔ)之StringBuffer詳解

    Java基礎(chǔ)之StringBuffer詳解

    這篇文章主要介紹了Java基礎(chǔ)之StringBuffer詳解,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • springBoot service層事務(wù)控制的操作

    springBoot service層事務(wù)控制的操作

    這篇文章主要介紹了springBoot service層事務(wù)控制的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 實例代碼講解JAVA 觀察者模式

    實例代碼講解JAVA 觀察者模式

    這篇文章主要介紹了JAVA 觀察者模式的的相關(guān)資料,文中代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 解決若依pageHelper在動態(tài)切換數(shù)據(jù)源問題

    解決若依pageHelper在動態(tài)切換數(shù)據(jù)源問題

    這篇文章主要介紹了解決pageHelper在動態(tài)切換數(shù)據(jù)源問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中字符串去重的特性介紹

    Java中字符串去重的特性介紹

    這篇文章主要介紹了Java中字符串去重的特性,是Java8中引入的一個新特性,至于是否真的用起來順手就見仁見智了...需要的朋友可以參考下
    2015-07-07

最新評論