一段有意思的java程式碼
阿新 • • 發佈:2019-01-04
最近在一本書上看到的,書名 突破java程式設計師16課。先看程式碼
class Base { private int i = 2; public Base() { System.out.println(this.i); this.display(); } public void display() { System.out.println(this.i); } } class Sub extends Base { private int i = 22; public Sub() {//這裡會隱式呼叫super() i=222; } public void display() { System.out.println(this.i); } } public class Demo { public static void main(String[] args) { new Sub(); } }
這段程式碼最後輸出的是2,0。
這裡面有幾個概念,搞清楚就明白了。不過我記這個的時候還是有點混淆的,只是大概模糊覺得是這麼回事。
1、java物件的構造器只負責對java物件例項變數執行初始化(賦初始值)
2、執行子類構造器之前會先執行父類構造器
3、變數的編譯時型別和執行時型別不同時:
1)通過該變數訪問它引用的物件的例項變數,該例項變數值由申明該變數的型別決定。
2)通過該變數訪問它引用的物件的例項方法,該方法行為將由它所引用的物件來決定。