国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

關于Java繼承中父類和子類構造函數的問題

瀏覽:3日期:2022-08-22 13:43:39

Java子類在實例化時默認調用的是父類的無參構造函數,不論實例化時調用的是子類的有參還是無參構造函數,

可以參考這篇Java子類實例化總是默認調用父類的無參構造操作

1、當父類沒有顯式定義構造方法時,

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

2、當父類有顯式定義無參構造方法時,

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

3、當父類只有顯式定義有參構造方法時,

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

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

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

提醒一點,當沒有子類繼承父類時,父類只定義有參構造函數是沒有問題的。

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

總結:

父類有無參構造函數時(顯示或隱式),子類的有參和無參構造函數都是默認調用父類的無參構造函數;當父類只有有參構造函數時,子類可以有有參和無參構造函數,子類有參構造函數必須顯式調用父類的有參構造函數,子類無參構造函數也必須顯式調用父類的有參構造函數,但需給父類有參構造函數賦實參。

1中的示例:

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

運行結果:

子類的無參構造方法

2中的示例:

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

運行結果:

子類的無參構造方法

3中的示例(1):

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

結果:顯示參數沒有定義

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('父類中的有參構造方法'+i); }}class Son1 extends Father1{ public Son1(int i) { super(i); System.out.println('子類中有參構造方法'+i); }}public class TestExtend {public static void main(String[] args) { System.out.println('-----'); Son1 a = new Son1(5);}}

結果:

-----

父類中的有參構造方法5

子類中有參構造方法5

4中的示例:

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

結果:

父類的無參構造方法

子類的無參構造方法

-----

父類中的有參構造方法5

子類中有參構造方法5

以上這篇關于Java繼承中父類和子類構造函數的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 综合国产 | 久久99精品久久久久久h | 精品亚洲永久免费精品 | 欧美怡红院免费的视频 | 日本免费一二区视频 | 91成人免费版 | 很黄的网站在线观看 | 男女午夜爽爽 | 曰本aaaaa毛片午夜网站 | 亚洲黄色三级网站 | 免费看一级欧美激情毛片 | 女人张开腿让男人桶视频免费大全 | 欧美视频网站在线观看 | 美国一级免费毛片 | 国产爱视频 | 亚洲国产天堂久久九九九 | 久久久国产99久久国产一 | 久草在线色站 | 在线免费观看亚洲 | 国产一区二区三区高清 | 一色屋成人免费精品网站 | 欧美精品做人一级爱免费 | 欧美亚洲另类久久综合 | 国语自产拍天天在线 | 久久99久久精品免费思思 | 俄罗斯特级毛片 | 亚洲视频网站在线观看 | 日韩黄色一级毛片 | 国产三级久久久精品三级 | 牛人盗摄一区二区三区视频 | 国产成人综合久久精品亚洲 | 日韩一区二区不卡 | 国产专区第一页 | 欧美一级毛片日本 | 97超级碰碰碰免费公开在线观看 | 中文在线观看视频 | 性生活视频网 | 色综合久久88中文字幕 | 久久综合久久美利坚合众国 | 国产永久在线观看 | 夜夜春夜夜夜夜猛噜噜噜噜噜 |