ArrayList不会对列表中的子类对象使用.get(int),但会允许我使用.add()

问题描述 投票:0回答:1

我有一个班

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类型的对象,编译器都会说我在尝试返回不可兼容的类型。

我完全不明白为什么会这样?

编辑:示例代码不正确

java oop arraylist subclass superclass
1个回答
0
投票

当你从你的列表中返回一个对象时,它将被视为一个超级Object,如果你想把它作为一个subObj1或任何其他子类使用,你将不得不转换它。

subObj1 sub = (subObj1) aList.get (0);

0
投票

instanceof

使用 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
© www.soinside.com 2019 - 2024. All rights reserved.