国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵定县| 革吉县| 邓州市| 北宁市| 依兰县| 滨海县| 高尔夫| 兴安县| 玉龙| 齐河县| 黔东| 湟源县| 博湖县| 齐齐哈尔市| 临西县| 专栏| 凤庆县| 门源| 东莞市| 盘锦市| 富民县| 花莲县| 昌乐县| 长武县| 灵寿县| 二连浩特市| 石门县| 嘉祥县| 绥宁县| 贵定县| 图木舒克市| 卫辉市| 莱州市| 磴口县| 樟树市| 垣曲县| 炎陵县| 两当县| 海淀区| 庄河市| 双鸭山市|