當前位置:首頁 » 編程語言 » java子類的構造函數

java子類的構造函數

發布時間: 2022-12-09 07:34:34

① 關於java中子類繼承父類的構造方法

java繼承中對構造函數是不繼承的,只是調用(隱式或顯式)。
舉例說明:
public class FatherClass {

public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}

public class SonClass extends FatherClass{
public SonClass() {
}

public SonClass(int c) {
System.out.println(1234);
}

public static void main(String[] args) {
SonClass s = new SonClass(66);

}
}
編譯後執行結果如下:
分析:SonClass s = new SonClass(66);執行這句時,調用
public SonClass(int c) {
System.out.println(1234);//系統會自動先調用父類的無參構造函數(super())
}

在這個構造函數中,等價於
public SonClass(int c) {
super();//必須是第1行,否則不能編譯
System.out.println(1234);
}
所以結果是 100 1234
3.如果子類構造函數是這樣寫的
public SonClass(int c) {
super(22);//必須是第1行,否則不能編譯
//顯式調用了super後,系統就不再調用無參的super()了;
System.out.println(1234);
}
執行結果是 22
1234
總結1:構造函數不能繼承,只是調用而已。
如果父類沒有無參構造函數
創建子類時,不能編譯,除非在構造函數代碼體中第一行,必須是第一行顯式調用父類有參構造函數
如下:
SonClass (){
super(777);//顯示調用父類有參構造函數
System.out.println(66);
}
如果不顯示調用父類有參構造函數,系統會默認調用父類無參構造函數super();
但是父類中沒有無參構造函數,那它不是不能調用了。所以編譯就無法通過了。
總結2:創建有參構造函數後,系統就不再有默認無參構造函數。
如果沒有任何構造函數,系統會默認有一個無參構造函數。

② java子類的構造函數...

父類少了個無參構造方法。或者在子類的構造方法中改一下
fish(String n,int s){//子類fish的構造函數
super(n);
swimspeed=s;
}

③ java創建父類對象可以用子類構造函數why

子類繼承父類的數據和方法,子類對象當然也屬於父類的類型,
不管父類或子類,靜態成員總是在new創建對象之前執行
子類繼承父類的構造方法的原則:一般JVM先調用子類的構造函數,
第一種情況:若子類構造函數開始沒有顯示調用父類構造函數,則自動調用父類那個無參構造函數。若已顯示調用了,則調用顯示調用的構造函數,而不再調用父類其它的構造函數。
第二種情況:在沒有顯示調用的情況下,若父類中無構造函數,則調用父類默認的構造函數。若父類中有構造函數而沒有無參的構造函數,編譯時會報錯。
多態性,是編譯引用變數時,無法確定其調用的是哪個類的方法,只能在程序運行期間,才能確定引用變數調用的具體類的方法,與創建父類和子類對象無關喲

④ java中的構造函數有什麼用用它有什麼好處在什麼地方用

構造函數是類的一個特殊方法,這個方法用來生成實例時由系統自動調用,程序員無法直接調用。構造函數方法名同類名相同且參數為空。子類繼承父類後默認繼承父類的構造函數,即:子類存在隱含方法:super(),如果子類重寫構造函數則子類也隱含調用super()。
如下例:

例一:
package sample;
public class A{
A(){
System.out.println("主類構造函數調用");
}
public static void main(String args[]){
A g=new A();
subA s=new subA();
}

}
class subA extends A{

}
執行結果為:
主類構造函數調用
主類構造函數調用
本例中子類subA中沒有任何方法,所以隱含調用super(),super()指向A()。
例二:
package sample;
public class A{
A(){
System.out.println("主類構造函數調用");
}
public static void main(String args[]){
A g=new A();
subA s=new subA();
}

}
class subA extends A{
public subA(){
}
}
執行結果為:
主類構造函數調用
主類構造函數調用
本例中子類subA只有一個空方法suba()中沒有任何方法,所以也隱含調用super(),super()指向A()。
例三:
package sample;
public class A{
A(){
System.out.println("主類構造函數調用");
}
public static void main(String args[]){
A g=new A();
subA s=new subA();
}

}
class subA extends A{
public subA(){
System.out.println("子類構造函數調用");
}
}
執行結果為:
主類構造函數調用
主類構造函數調用
子類構造函數調用
本例中子類subA的方法subA()雖然後輸出但同上例中相同都為構造函數,所以也隱含調用super(),super()指向A()。

⑤ JAVA中 子類與父類構造方法的關系 個人理解

編寫JAVA作業時在繼承的環節發現了一些錯誤,希望總結一些規律:(以下全部屬於自己歸納,可能有問題)
一句話概括就是:子類一定會調用(不是繼承)父類的構造方法!
即遵循一個原則:子類的構造一定是在父類已構造的基礎上!
這句話要分為幾種情況來理解(下面只討論父類有構造函數):
子類構造函數自動調用super() (也可以手動加上)
但如果父類只有含參數的構造方法,那麼子類必須申明一個構造方法,其中包含對super(args)的調用
一、父類含有無參構造函數
1、子類沒有構造方法或者含有無參的構造方法:
這種情況,都會默認地調用super()
2、子類含有有參數構造方法:
同樣會在首句默認調用super() //其實跟情況1類似
二、父類含有含參數的構造方法,不含無參數的構造方法:
子類沒得選擇:
子類必須申明一個構造方法(且含super的args),且方法里要首先調用super(args),否則報錯。
三、父類含 含參數的構造方法和無參的構造方法:
此時子類可以選擇性調用:
可以無構造方法:仍會默認調用super()
也可以有構造方法:其中會默認地調用super(),你也可以在開頭加上這句,如果你不希望調用父類默認的無參方法,那麼在 子類構造方法 中調用 父類含參構造方法。
上述看似情況復雜,其實基於其原則理解並不難。
綜上:java為了保持 子類的構造基於父類的構造 這一原則,子類構造時必須通過某些方式首先調用父類的構造方法,否則會報錯。

⑥ java繼承中構造函數的調用順序

首先是在main函數裡面,jvm發現了程序建立了一個Sanwich的對象,於是jvm便會到Sanwich裡面找到構造函數構造一個Sanwich對象。但是jvm發現Sanwich是PortableLunch的子類,所以jvm會要先構造PortableLunch的對象。可是PortableLunch類又是Lunch的子類,所以jvm會要去構造Lunch對象。同理,Lunch又是Meal的子類,因而jvm會要構造Meal的對象。之後jvm會依照Meal、Lunch、PortableLunch、Sanwich的層次結構逐級構造出Sanwich對象,從而列印出Meal()、Lunch()、PortableLunch()、Sanwich()。但是由於Sanwich類中有Bread、Cheese、Letter三個變數,如果你沒有他們實例化的話,那麼程序就此結束;可是你給這三個變數實例化了,因此Sanwich在調用構造函數Sanwich()之後,回過頭來處理這三個實例化了的變數。所以程序又會列印出Bread()、Cheese()、Letter().

⑦ java,中的子類繼承父類,子類如何調用父類的構造函數舉一個簡單的例子加註釋說明

子類無條件調用父類的無參構造函數,實例:

父類:

package com.test;


public class TestFatherClass {

private String name="abc";

TestFatherClass(){

System.out.println("1、這是父類的無參構造函數");

}

TestFatherClass(String a){

System.out.println("2、這是父類的有參構造函數");

}

}


子類:

package com.test;


public class TestChildClass extends TestFatherClass{

TestChildClass(){

System.out.println("3、這是子類的無參構造函數");

}

TestChildClass(String str){

System.out.println("4、這是子類的有參構造函數");

}

public static void main(String[] args) {

System.out.println("實例化對象時:(無參)");

TestChildClass test = new TestChildClass();

System.out.println("實例化對象時:(有參)");

TestChildClass test2 = new TestChildClass("adad");

}

}


輸出結果:

⑧ java中只要調用子類的構造函數就要調用父類無參數的構造函數嗎若父類中不存在無參數構造函數會出錯嗎

Q1.java中只要調用子類的無參構造函數就要調用父類無參數的構造函數! Q2.也不一定。 e.g 如果你子類只調用無參構造方法(沒有調用多個參數的構造方法),那麼父類的無參構造方法則可有可無,因為系統會幫你生成。 你應該知道,如果子只類定義了一個帶有參數的構造方法,那麼系統就不會幫你生成無參構造方法。父類也是如此。 因為你父類定義了帶參的構造方法,所以系統不會幫你生成無參構造方法,而你子類調用父類無參構造方法的時候就會提示父類沒有無參構造方法。會報錯的!

⑨ java 子類的構造函數都必須要super();嗎

不是必須的,在構造函數中,如果第一行沒有寫super(),編譯器會自動插入.但是如果父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時你必須加入對父類的實例化構造.而this就沒有這個要求,因為它本身就進行實例化的構造.

熱點內容
科密加密卡片 發布:2025-01-20 22:45:01 瀏覽:111
蘋果的文件怎麼轉到安卓 發布:2025-01-20 22:43:10 瀏覽:652
c語言迴文串 發布:2025-01-20 22:43:09 瀏覽:767
垃圾壓縮價格 發布:2025-01-20 22:14:05 瀏覽:421
溫十系統如何看處理器配置 發布:2025-01-20 21:59:47 瀏覽:302
米號源碼 發布:2025-01-20 21:55:30 瀏覽:893
電信四川dns伺服器ip 發布:2025-01-20 21:54:51 瀏覽:92
電腦彈出腳本錯誤還能繼續使用嗎 發布:2025-01-20 21:42:29 瀏覽:586
安卓私密照片在哪裡 發布:2025-01-20 21:41:05 瀏覽:5
同濟復試編譯原理 發布:2025-01-20 21:33:54 瀏覽:310