2011-04-12 145 views
1

繼承人我的意思的例子:創建子類對象是否也創建其超類的對象?

public class Rectangle 
{ 
    private int length; 
    private int breadth; 
    . 
    . 
} 

public class Box extends Rectangle 
{ 
    private int height; 
    . 
    . 
} 

當你:

Box b = new Box(); 

是否創建一個盒子和一個矩形對象,用矩形不能直接訪問,但只能通過訪問Box對象。換句話說,它是否在內存中創建兩個對象?

回答

4

換句話說,它是否在內存中創建兩個對象?

不,它會創建一個對象。該單個對象表示Box(並且由於這是Rectangle的子類型,所以該同一對象也表示Rectangle)。

繼承只是確保Box對象的接口是Rectangle接口的擴展。

+0

好吧,但我不明白的是,我被告知Box不會繼承Rectangle的私有實例變量,但它可以通過公共方法訪問它們。在那種情況下,內存中的某處不會有Rectangle對象? //困惑 – 2011-04-12 12:13:37

+2

@Zac Blaric:你被告知錯了 - Box *會*繼承這些,它不能直接訪問它們。 – Erik 2011-04-12 12:14:54

+0

@Zack Blazic,好吧,這是一個措辭問題。你也可以說它繼承了它們,但它不能訪問它們。 – aioobe 2011-04-12 12:15:58