Java - 是否有像instanceof这样的“子类”?

时间:2010-04-23 15:25:04

标签: java subclass equals instanceof

我重写了equals()方法,我需要知道对象是否是Event的子类的实例(Event是超类)。我想要像“obj subclassof Event”这样的东西。怎么能这样做?

提前致谢!

6 个答案:

答案 0 :(得分:44)

instanceof可以解决这个问题。

答案 1 :(得分:32)

使用以下代码,您可以检查对象是否是扩展Event但不是Event类实例的类。

if(myObject instanceof Event && myObject.getClass() != Event.class) {
    // then I'm an instance of a subclass of Event, but not Event itself
}

默认情况下,instanceof检查对象是否属于指定的类,或者在任何级别的事件中检查子类(扩展或实现)。

答案 2 :(得分:10)

真的instanceof应该足够好但是如果你想确定这个班级真的是一个子类,那么你可以用这种方式提供支票:

if (object instanceof Event && object.getClass() != Event.class) {
    // is a sub-class only
}

由于Adrian有点领先于我,我还将添加一种方法,你可以用通用方法做到这一点。

public static boolean isSubClassOnly(Class clazz, Object o) {
    return o != null && clazz.isAssignableFrom(o) && o.getClass() != clazz;
}

通过以下方式使用:

if (isSubClassOnly(Event.class, object)) {
    // Sub-class only
}

答案 3 :(得分:2)

您可能需要查看someObject.getClass().isAssignableFrom(otherObject.getClass());

答案 4 :(得分:1)

Java中没有直接的方法来检查子类。 对于任何子类对象,instanceof Event将返回true

您可以对该对象执行getClass(),然后在getSuperclass()对象上使用Class方法检查超类是否为Event

答案 5 :(得分:0)

如果obj是Event的子类,那么它就是一个instanceof。 obj是它派生自的每个类/接口的实例。所以至少所有对象都是Object的实例。