我有一个带有几个子类的超类。
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
更不用说我正在调用的一些方法是在超类中定义的明确,它们的类型未定义。我在这里敲我的头。我完全不知道问题是什么。
如果你们有人可能指出我可能的方向,我会非常感激。我不知道我是否提供了足够的信息,所以请提出您认为可能适用的任何问题。
提前致谢。
答案 0 :(得分:5)
在查看了所有其他答案和您的问题之后,想到这种行为的唯一可能原因是您有两个SubClass1类文件。 SubClass1扩展SuperClass的一个,而不扩展SuperClass的一个。尝试在ArrayList中插入SubClass1的类似乎使用后面的类文件。出于同样的原因,超类方法没有出现在子类实例上。
检查您的导入并确保使用的是正确版本的SubClass1。
如果上述方法无法解决问题,则您的java源文件和.class文件也可能不同步。删除eclipse项目中的bin文件夹并再次构建项目。您还可以清理和构建项目,以确保没有任何不同步。
答案 1 :(得分:2)
以下程序适用于我(在JRE 1.6上运行)
public class Test {
public static abstract class SuperClass {
}
public static class SubClass1 extends SuperClass {
public SubClass1() {
}
}
public static void main(String[] args) {
ArrayList<SuperClass> list = new ArrayList<SuperClass>();
SubClass1 object;
object = new SubClass1();
System.out.println("Test1");
list.add(object);
for (SuperClass obj : list) {
if (obj instanceof SubClass1) {
System.out.println("Test2");
}
}
}
}
修改强> 即使将SuperClass和SubClass1移动到不同的类并删除静态标识符,我也得到相同的输出
输出:
Test1
Test2
答案 2 :(得分:0)
将此SubClass1 object;
object = new SubClass1(parameters);
更改为
SuperClass object;
object= new SubClass1(parameters);