JAVA繼承的初始化問題
看程式碼說結果
執行結果:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
為什麼會這樣呢
並且無論修改Base的name為public還是protected,結果都是這樣.
甚至程式碼改成這樣,還是這個結果(Base類的name欄位改成了basename)
後臺一個大神一語道破
Base的建構函式中,呼叫的兩個方法tellName和printName,因為繼承的原因,應該執行的是子類的方法,而子類此時還沒有初始化這個資料成員,所以顯示為null.
-
public class Dervied extends Base {
-
private String name = "dervied";
-
public Dervied() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Dervied tell name: " + name);
-
}
-
public void printName() {
-
System.out.println("Dervied print name: " + name);
-
}
-
public static void main(String[] args){
-
new Dervied();
-
}
-
}
-
class Base {
-
private String name = "base";
-
public Base() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Base tell name: " + name);
-
}
-
public void printName() {
-
System.out.println("Base print name: " + name);
-
}
- }
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
為什麼會這樣呢
並且無論修改Base的name為public還是protected,結果都是這樣.
甚至程式碼改成這樣,還是這個結果(Base類的name欄位改成了basename)
-
public class Dervied extends Base {
-
private String name = "dervied";
-
public Dervied() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Dervied tell name: " + name);
-
}
-
public void printName() {
-
System.out.println("Dervied print name: " + name);
-
}
-
public static void main(String[] args){
-
new Dervied();
-
}
-
}
-
class Base {
-
public String basename = "base";
-
public Base() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Base tell name: " + basename);
-
}
-
public void printName() {
-
System.out.println("Base print name: " + basename);
-
}
- }
後臺一個大神一語道破
Base的建構函式中,呼叫的兩個方法tellName和printName,因為繼承的原因,應該執行的是子類的方法,而子類此時還沒有初始化這個資料成員,所以顯示為null.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1784890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 繼承問題繼承
- Java建構函式的繼承問題Java函式繼承
- 學習Java中遇到的繼承問題Java繼承
- Java類(繼承)初始化順序Java繼承
- delegate 繼承問題繼承
- 模板類的繼承問題繼承
- Java的繼承Java繼承
- 一文打盡Java繼承的相關問題Java繼承
- Java繼承Java繼承
- Java繼承的使用Java繼承
- java中的繼承Java繼承
- 建構函式的繼承問題 (轉)函式繼承
- [提問交流]前臺模板繼承問題繼承
- 18、繼承以及繼承中成員變數和成員方法的重名問題繼承變數
- Java面試題:Java中的集合及其繼承關係Java面試題繼承
- java繼承extendsJava繼承
- Java單繼承Java繼承
- java中繼承Java中繼繼承
- JAVA 之 繼承Java繼承
- java繼承-super的用法Java繼承
- Java的類與繼承Java繼承
- java的繼承機制Java繼承
- 【c++基礎】菱形繼承問題C++繼承
- dubbo繼承springboot出現的問題繼承Spring Boot
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- java -繼承 -重寫Java繼承
- Java繼承練習Java繼承
- Java繼承和介面Java繼承
- Java集合繼承圖Java繼承
- Java:類與繼承Java繼承
- Java 繼承詳解Java繼承
- Java介面之間的繼承Java繼承
- java 繼承的基礎(轉)Java繼承
- 面試官問:JS的繼承面試JS繼承
- 遊戲系統開發繼承帶來的問題遊戲繼承
- Python-單繼承中值傳遞的問題Python繼承
- Java繼承中成員變數的訪問特點「圖文分析」包含繼承中重名訪問的特點Java繼承變數
- Javascript繼承4:潔淨的繼承者—-原型式繼承JavaScript繼承原型