[英]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.class
, new Master().getClass()
返回Master.class
。
問題1:
Master test = new Inner();
上面的代碼行表示從Inner
類( ovveriding )獲取方法的實現。 因此內部類的getClass()
方法調用。
問題2:
test.innerNumber
繼承發生在父母之間。 innerNumber
是Inner
(子級)的屬性。 Master
(父母)不會得到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.