我有几个子类的超类。

public abstract class SuperClass {
}

public class SubClass1 extends SuperClass {
}

我创建了一个ArrayList来包含SuperClass类型的对象。
private ArrayList<SuperClass> list = new ArrayList<SuperClass>();

我在Eclipse中看到的错误有很多。
首先,任何添加子类对象的尝试都会出错:
SubClass1 object;
object = new SubClass1(parameters);

list.add(object)  //I get error: The method add(SuperClass) in the type
                  //ArrayList<SuperClass> is not applicable for the arguments
                  //(SubClass1)

稍后在代码中,当我尝试将一种类型转换为另一种类型时,我遇到了更多问题:
for (SuperClass obj : list){
    if (obj instanceof SubClass1){ //This gets an error like this:
         ....                      //Incompatible conditional operand types
    }                              // SuperClass and SubClass1

更不用说我正在调用的某些方法在超类中已明确定义,但对于类型却未定义。我在这里撞头。我完全不知道问题可能是什么。

如果你们可以向我指出一些可能的方向,我将很有义务。我不知道我是否提供了足够的信息,所以请问您认为可能适用的任何问题。

提前致谢。

最佳答案

在查看了所有其他答案和您的问题之后,想到这种行为的唯一可能原因是您有两个SubClass1类文件。其中SubClass1扩展了SuperClass,而另一类则没有。试图在ArrayList中插入SubClass1的类似乎正在使用更高版本的类文件。出于相同的原因,父类方法未显示在子类实例上。

检查您的导入,并确保您使用的SubClass1版本正确。

如果上述方法不能解决问题,则您的Java源文件和.class文件也可能不同步。删除eclipse项目中的bin文件夹,然后再次构建该项目。您还可以清理和构建项目以确保没有任何不同步的情况。

10-07 12:29