2016-04-14 66 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"); 
}