You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArrayList能否存放父类的子类对象?如何判断其中对象的子类类型?

关于ArrayList存放子类对象及类型判断的问题

1. ArrayList能否存放子类B、C的对象?

完全可以。这是Java多态特性的体现——子类B、C本质上是父类A的实例,所以声明为ArrayList<A>的集合,完全可以存放B、C的对象。

2. 遍历ArrayList时判断对象类型的方法

有两种常用方式:

方式一:使用instanceof关键字

instanceof可以判断对象是否是某个类(或其子类)的实例,适合区分父类和子类的类型。示例代码:

// 定义类结构
class A {}
class B extends A {}
class C extends A {}

public class Test {
    public static void main(String[] args) {
        ArrayList<A> list = new ArrayList<>();
        list.add(new A());
        list.add(new B());
        list.add(new C());
        
        for (A obj : list) {
            if (obj instanceof B) {
                System.out.println("当前对象是B类实例");
            } else if (obj instanceof C) {
                System.out.println("当前对象是C类实例");
            } else if (obj instanceof A) {
                System.out.println("当前对象是A类实例");
            }
        }
    }
}

方式二:使用getClass()方法

getClass()返回对象的实际运行时类,它会严格匹配类型(不会包含子类),适合需要精确判断对象所属类的场景。示例代码:

for (A obj : list) {
    if (obj.getClass() == B.class) {
        System.out.println("当前对象是B类实例");
    } else if (obj.getClass() == C.class) {
        System.out.println("当前对象是C类实例");
    } else if (obj.getClass() == A.class) {
        System.out.println("当前对象是A类实例");
    }
}

注意:如果有多层继承(比如B还有子类D),instanceof B会同时匹配B和D的实例,而getClass() == B.class只会匹配B的实例,可根据需求选择。

内容的提问来源于stack exchange,提问作者Tran Dai Duong FX17629

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:05:09