不會產生父類物件,只是用了父類的建構函式而已,並不是用到建構函式就會產生物件,建構函式只是起物件初始化作用的,而不是起產生物件作用的,如果new A();即只有new語句才會產生父類A的物件。 變數是靜態繫結 ,方法是動態繫結。 這裡面變數在編譯期間實現了變數呼叫語句與變數定義賦值語句的繫結,繫結的自然是父類的,因為呼叫時型別是父類的,所以值是父類中定義的值 其實你可以這麼理解 建立了一個子類物件時,在子類物件記憶體中,有兩份這個變數,一份繼承自父類,一份子類。 絕對不會產生父類物件,父類中的成員被繼承到子類物件中,用指向子類物件的父類引用呼叫父類成員,只不過是從 子類物件記憶體空間中找到那個被繼承來的父類成員,也就是說實質是用子類物件呼叫變數a,這樣就可以解釋成員必須通過物件呼叫的規定,只不過這時呼叫的是子類物件中的繼承自父類的a(子類物件中有兩個a,一個繼承自父類,一個屬於自己) 哎,話說的有些亂。 這個問題也困惑我很久,上網查詢發現很多人是錯誤的,最後找到幾篇好的文章才明白,可能很多java老手也都會犯“產生父類物件”這個錯誤,最近才搞明白。 你自己想想,如果產生父類物件,如果父類是抽象類,抽象類允許產生物件嗎?所以這種說法不嚴謹
package jc.cn; public class Car { public int a; public int b; } class Truck extends Car { byte c; byte d; } class Smp { public static void main(String[] args) { Truck t=new Truck(); } } 當執行完下句後: Truck t=new Truck(); 求物件的記憶體模型圖?