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問題:若父類沒有構造函數,子類構造函數繼承什麼
不寫構造函數,系統會提供一個默認的構造函數。
你寫的情況,A會有一個系統提供的默認構造無參函數
publicA(){}B的構造函數默認首先調用A的這個構造函數(當然因為什麼也沒執行,運行結果你看不出任何區別)
Ⅲ java繼承父類構造函數
父類在子類實例化之前就被實例化了,所以說子類繼承過來的屬性都是實例化之後的值。這話我說著比較廢話,父類不實例化的話壓根談不到調用啊什麼的。
但是實例化的時候,類屬性只是擁有一個默認的值,比如int型的默認值就是0,所以實際用的時候可能用構造方法或者set方法再設置一遍。
父類以什麼身份進入子類。這個問題,父類壓根兒不進入子類,子類只是可以調用父類的屬性和方法,擁有父類的特性,除此之外沒什麼關系了。
Ⅳ java子類可以繼承父類的構造方法嗎
一,java子類不能繼承父類的構造方法(可以調用,但不是繼承):
1、構造方法的定義是與類的名稱相同:如果子類能夠繼承父類的構造方法,那麼在子類的構造方法中就有不同於子類名稱的構造法;
2、這與構造方法的定義不符,因此子類是不能繼承父類的構造方法的;
3、以上參考資料來源:http://bbs.csdn.net/topics/360118234
二,子類繼承父類時,需要注意以下三點:
1、在子類繼承父類的時候,子類必須調用父類的構造函數;
2、在父類有默認構造函數,子類實例化時自動調用,在父類沒有默認構造函數,即無形參構造函數,子類構造函數必須通過super調用父類的構造函數;
3、在java的繼承當中子類是不可以繼承父類的構造函數,只能調用父類的構造函數。
Ⅳ 關於JAVA繼承的問題:子類無條件地繼承父類不含參數的構造函數。這句話對還是錯為什麼。
不對的,構造函數是不能繼承的。子類可以繼承父類的所有成員變數和成員方法,但不能繼承父類的構造方法。這就意味著,子類不能用「.」來操作父類的構造方法。但實際上,子類的構造方法中一定會調用父類的構造方法,不過這種調用只是為了創建子類對象進行的初始化處理。而不會創建父類對象。可以使用super()調用父類構造方法。
Ⅵ java父類的構造器私有了,怎麼繼承
一,不能被繼承,除非還有其它構造方法:x0dx0a1,設置一個類不能被繼承,兩種方法:一是final,二就是構造方法私有;x0dx0a2,jave類設計的任何方法只要設置為private之後,就無法繼承了,除非改掉構造方法的private的聲明,既然聲明private就不允許本類之外的任何類使用。x0dx0a二,java中類的定義:x0dx0a1,final類:又稱「最終類」,它只能用來創建對象,而不能被繼承,與抽象類剛好相反,而且抽象類與最終類不能同時修飾同一個類;x0dx0a2,Private ,編程語句在模塊級別中使用,用於聲明私有變數及分配存儲空間;x0dx0a3,語法Private [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] 。
Ⅶ 關於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 能繼承構造器方法嗎
首先搞清楚繼承和重載兩個概念:
Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。
方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
繼承的對象是類,重載的對象是方法。
所以,java是可以重載構造器方法的。
