2016-04-14 19 views
2

クラスMinorClassAMinorClassBの両方がMajorClassに拡張されているとします。私はMajorClassのオブジェクトを持っていますが、実際にはそのサブクラスのインスタンスの1つです。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:

をしたいよう関係式の値がnullでなく、参照がするReferenceTypeにキャストすることができれば、instanceofオペレータの結果が真であるサウンド上げることなくClassCastException。それ以外の場合は結果はfalseです。だからあなたの場合

:objがクラスのインスタンスである場合

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

のインスタンスは、親クラスと子クラスの関係分析を実行するためにコンパイル時間と実行時間の両方をチェックします。 @bytepadding.com/java/java-instanceof/ – KrazyGautam

+0

@KrazyGautam:はい、コンパイル時のチェックはこの質問には関係ありません。 –

2

使用のinstanceofチェックする:

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"); 
} 
関連する問題