2016-04-14 70 views
2

考慮類MinorClassAMinorClassB,這兩個類都擴展爲MajorClass。我有一個MajorClass的對象,我確實知道它實際上是它的一個子類的一個實例。檢查Java中對象的子類

MinorClassA subclassedObj = new MinorClassA(); 
MajorClass obj = subclassedObj; 

//------ More code ------------- 

if(subclassof(obj) == MinorClassA) //Something like this 

如何找出該對象的子類是什麼?我無權訪問subclassedObj,僅限於obj

編輯澄清:我知道如何檢查MinorClassAMajorClass的實例,但不是相反。

+2

'如果(OBJ的instanceof類名)...' – khelwood

+1

*我怎樣才能找出該對象的子類是什麼?*編程接口,爲什麼你要確定具體類型? –

+2

@ElliottFrisch:「界面程序」應該被看作是一個很好的通用規則,而不是在任何情況下遵循的教條。有合法的理由來檢查對象的執行時間類型。 –

回答

4

聽起來像是你想要的instanceof operator:

在運行時,如果RelationalExpression的值不爲空,並引用可強制轉換爲引用類型instanceof操作的結果爲真而不會提高ClassCastException。否則結果是錯誤的。

所以你的情況:

if (obj instanceof MinorClassA) { 
    ... 
} 
+0

實例編譯時和運行時檢查執行父類和子類的關係分析。 http://bytepadding.com/java/java-instanceof/ – KrazyGautam

+0

@KrazyGautam:是的,但編譯時檢查與此問題無關。 –

2

使用instanceof來檢查,如果obj是類的一個實例:

if (obj instanceof MinorClassA) { 
    System.out.println("obj is an instance of MinorClassA"); 
} else if (obj instanceof MinorClassB) { 
    System.out.println("obj is an instance of MinorClassB"); 
}