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

如何实例化抽象父类Equipment类型的List参数?Java面向对象开发疑问

原提问内容

本次练习的部分内容如下:
练习示意图
我创建了名为Equipment的抽象父类,它包含ConcreteMixer在内的4个子类。练习要求我创建Job类,其构造方法如图所示。我不理解其中List<Equipment>类型参数的含义,但还是按照要求完成了类的编写,并在main函数中对Job进行了实例化。
我不清楚实例化后该参数的结果与Equipment及其子类有什么关联,相关代码如下:

public abstract class Equipment {
        String requirement;
        public Equipment(String requirements){
            this.requirement=requirements;
        }
        public String getRequirement() {
        return requirement;
    }
}

public class ConcreteMixer extends Equipment{

    public ConcreteMixer(String requirement){
        super(requirement);
    }

    public String toString(){
        return  requirement;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof ConcreteMixer) {
            ConcreteMixer that = (ConcreteMixer) obj;
            return this.requirement.equals(that.requirement);
        } return false;
    }
}


public Job(Address location, String description,List<Equipment> requiredEquipment, Date plannedDate) {
        this.location = location;
        this.description = description;
        this.requiredEquipment = requiredEquipment;
        this.plannedDate = plannedDate;
}
public static void main(String[] args) {
        Job s= new Job(new Address("Star street",16, "da","London"),"mixer",new 
        ArrayList<Equipment>(),new Date(12,5,21));
        System.out.println(s);
    }
}

运行结果

location:Address isLondonStar street16da
description:mixer
requiredEquipment:[]
plannedDate:day:12
month:5
year:21

疑问解答
  • List<Equipment>参数的含义
    这个参数用来存储当前作业需要用到的所有设备实例集合。Java泛型规则限定了这个列表只能存入Equipment类型的对象,由于Equipment是抽象类无法直接实例化,实际上就是可以存放它的所有子类的实例,包括你写的ConcreteMixer和另外3个自定义子类,是Java多态特性的典型应用。
  • 参数和Equipment子类的关联逻辑
    你当前运行结果里requiredEquipment输出为空,是因为你实例化Job的时候传入的是刚初始化的空ArrayList,没有往列表里添加任何子类实例。你可以按照下方调整代码就能看到实际关联效果:
public static void main(String[] args) {
    // 先创建ConcreteMixer子类实例
    ConcreteMixer mixer = new ConcreteMixer("150L小型混凝土搅拌机");
    // 初始化设备列表,添加对应的设备实例
    List<Equipment> equipmentList = new ArrayList<>();
    equipmentList.add(mixer);
    // 实例化Job的时候传入填充好的设备列表
    Job s= new Job(new Address("Star street",16, "da","London"),"mixer",equipmentList,new Date(12,5,21));
    System.out.println(s);
}

调整后再运行,requiredEquipment字段就会输出你存入的搅拌机的requirement属性值,也就是你重写的ConcreteMixer类toString方法的返回内容。
后续如果需要在Job类中统一处理所有设备的逻辑,比如批量获取所有设备的要求,直接遍历requiredEquipment列表调用getRequirement()方法即可,不需要区分每个对象具体属于哪个Equipment子类,能大幅简化代码逻辑。


内容的提问来源于stack exchange,提问作者yiran ding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:57:00