我怎么能告诉它属于哪个继承类?

时间:2017-09-17 20:08:34

标签: java inheritance subclass

我正在处理从名为Creature的类继承的多个类。我有一个Creature对象数组,我正在循环,以确定数组中的哪些是子类Animal。我试过instanceOf,但我收到一个错误,说我将其声明为变量。这是我的方法的样子:

 public void notifyStateChange() {
        for (int i = 0; i < count; i++) {
            Class c = creatures[i].getClass();
            if (c.getName().equals("Animal")) {
                System.out.println("Animal type here");
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

您不必检索数组中对象的运行时类,以确定对象是否为Animal类型。只需以正确的方式使用instanceof

 public void notifyStateChange() {
        for (int i = 0; i < count; i++) {
            if (creatures[i] instanceof Animal) {
                System.out.println("Animal type here");
            }
        }
    }

或者,您可以试试以下内容。它接近你正在尝试的。只需使用getSimpleName代替getName

public void notifyStateChange() {
    for (int i = 0; i < count; i++) {
        Class c = creatures[i].getClass();
        if (c.getSimpleName().equals("Animal")) {
            System.out.println("Animal type here");
        }
    }
}

答案 1 :(得分:1)

我认为最好的方法是将动作放入Animal类本身,或者使用包装器以防万一。我给你的想法,因为有很多方法可以实现它。 您的代码应如下所示:

public void notifyStateChange() {
    for (int i = 0; i < count; i++) {
        creatures[i].doSmth();
    }
}

另外,您可以将所有doSmth()放入EnumMap,然后在代码中选择正确的实例。 if..else的主要问题是,如果您添加Creature的新子项,则必须修改所有这些位置。