国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java語言深入-構造函數的繼承問題

2019-11-18 11:16:42
字體:
來源:轉載
供稿:網友

這是我的讀書筆記,希望能夠對大家學習java有所幫助。所有代碼都經過測試,測試環境:

javaversion"1.4.0-rc"
Java(TM)2RuntimeEnvironment,StandardEdition(build1.4.0-rc-b91)
JavaHotSpot(TM)ClientVM(build1.4.0-rc-b91,mixedmode)

如大家發現任何錯誤,或有任何意見請不吝賜教。缺省構造函數的問題:base類是父類,derived類是子類,首先要說明的是由于先有父類后有子類,所以生成子類之前要首先有父類。class是由class的構造函數constrUCtor產生的,每一個class都有構造函數,假如你在編寫自己的class時沒有編寫任何構造函數,那么編譯器為你自動產生一個缺省default構造函數。這個default構造函數實質是空的,其中不包含任何代碼。但是一牽扯到繼續,它的問題就出現了。假如父類baseclass只有缺省構造函數,也就是編譯器自動為你產生的。而子類中也只有缺省構造函數,那么不會產生任何問題,因為當你試圖產生一個子類的實例時,首先要執行子類的構造函數,但是由于子類繼續父類,所以子類的缺省構造函數自動調用父類的缺省構造函數。先產生父類的實例,

然后再產生子類的實例。如下:

classbase{
}
classderivedextendsbase{
publicstaticvoidmain(String[]args){
derivedd=newderived();
}
}

下面我自己顯式地加上了缺省構造函數:

classbase{
base(){
System.out.}
}
classderivedextendsbase{
derived(){
System.out.println("derivedconstructor");
}
publicstaticvoidmain(String[]args){
derivedd=newderived();
}
}

執行結果如下:說明了先產生baseclass然后是derivedclass。

baseconstructor
derivedconstructor

我要說明的問題出在假如baseclass有多個constructor而derivedclass也有多個constructor,這時子類中的構造函數缺省調用那個父類的構造函數呢?答案是調用父類的缺省構造函數。但是不是編譯器自動為你生成的那個缺省構造函數而是你自己顯式地寫出來的缺省構造函數。

classbase{
base(){
System.out.println("baseconstructor");
}
base(inti){
System.out.println("baseconstructorinti");
}
}
classderivedextendsbase{
derived(){
System.out.println("derivedconstructor");
}
derived(inti){
System.out.println("derivedconstructorinti");
}
publicstaticvoidmain(String[]args){
derivedd=newderived();
derivedt=newderived(9);
}
}
D:/java/thinking/think6>javaderived
baseconstructor
derivedconstructor
baseconstructor
derivedconstructorinti

假如將base類的構造函數注釋掉,則出錯。

classbase{
//base(){
//System.out.println("baseconstructor");
//}
base(inti){
System.out.println("baseconstructorinti");
}
}
classderivedextendsbase{
derived(){
System.out.println("derivedconstructor");
}
derived(inti){
System.out.println("derivedconstructorinti");
}
publicstaticvoidmain(String[]args){
derivedd=newderived();
derivedt=newderived(9);
}
}
D:/java/thinking/think6>javacderived.java
derived.java:10:cannotresolvesymbol
symbol:constructorbase()
location:classbase
derived(){
derived.java:13:cannotresolvesymbol
symbol:constructorbase()
location:classbase
derived(inti){
2errors


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庄河市| 娄底市| 张家界市| 法库县| 洪江市| 陇西县| 宁化县| 玉门市| 新龙县| 威宁| 铅山县| 连山| 隆回县| 仁布县| 故城县| 土默特右旗| 漳州市| 油尖旺区| 陕西省| 祁阳县| 太和县| 磴口县| 龙南县| 策勒县| 武隆县| 杭锦后旗| 黄冈市| 定州市| 蒙城县| 文水县| 麻阳| 定日县| 尼玛县| 巴彦县| 如皋市| 松江区| 临猗县| 柘城县| 姜堰市| 吉安市| 肥东县|