我有一个班
public abstract class superObject{}
和子类
public class subObj1 extends superObject{}
public class subObj2 extends superObject{}
在我的主课上,我有
List<superObject> aList = new ArrayList<>();
的,让我可以调用
aList.add(subObj1)
但我不能调用
aList.get(0)
因为对于Array列表中的任何一个不是superObject类型的对象,编译器都会说我在尝试返回不可兼容的类型。
我完全不明白为什么会这样?
编辑:示例代码不正确
当你从你的列表中返回一个对象时,它将被视为一个超级Object,如果你想把它作为一个subObj1或任何其他子类使用,你将不得不转换它。
subObj1 sub = (subObj1) aList.get (0);
使用 instanceof
操作符来检查对象的类型,如下所示。
import java.util.ArrayList;
import java.util.List;
abstract class SuperObject {
}
class SubObj1 extends SuperObject {
}
class SubObj2 extends SuperObject {
}
public class Main {
public static void main(String[] args) {
List<SuperObject> aList = new ArrayList<>();
aList.add(new SubObj1());
aList.add(new SubObj2());
// Navigate using enhanced for loop
for (SuperObject obj : aList) {
if (obj instanceof SubObj1) {
System.out.println("Object of SubObj1");
} else if (obj instanceof SubObj2) {
System.out.println("Object of SubObj2");
}
}
// Or using index
for (int i = 0; i < aList.size(); i++) {
if (aList.get(i) instanceof SubObj1) {
System.out.println("Object of SubObj1");
} else if (aList.get(i) instanceof SubObj2) {
System.out.println("Object of SubObj2");
}
}
}
}
输出
Object of SubObj1
Object of SubObj2
Object of SubObj1
Object of SubObj2