簡體   English   中英

與子類和超類的混淆

[英]Confusion with subclasses and superclasses

Master test = new Inner();
System.out.println(test.getClass());

在上面的示例中,Inner類擴展了Master類,但是我感到困惑的是test.getClass()返回Inner,但是測試不是真的是Master類型嗎? 除了構造函數外,Inner類不能使用任何方法/屬性,只能使用Master類中的方法/屬性。 此外,Inner的構造函數實際上設置了Inner專有的屬性,但是即使它們使用構造函數,這些屬性在某種程度上在測試中也不存在-這似乎不起作用。

例如,如果將類定義為:

public class Master {
    public int number = 0;
    public Master() {
        number = 9;
    }
}

public class Inner extends Master {
    public int innerNumber = 0;
    public Inner() {
        number = 1;
        innerNumber = 2;
    }
}

測試將使用設置了innerNumber的Inner構造函數,但是test.innerNumber甚至不存在,因為innerNumber與Master類型沒有區別。 另外,test.getClass()表示它是內部類型,而不是主類型。

Object.getClass()返回對象的動態類型的類對象,而不是靜態類型(聲明了它的變量或屬性的類型)。

因此,無論持有引用的變量類型是什么, new Inner().getClass()返回Inner.classnew Master().getClass()返回Master.class

問題1:

Master test = new Inner();

上面的代碼行表示從Inner類( ovveriding )獲取方法的實現。 因此內部類的getClass()方法調用。

問題2:

test.innerNumber 

繼承發生在父母之間。 innerNumberInner (子級)的屬性。 Master (父母)不會得到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM