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

如何在Java作业的Driver类中用数组存储子类对象并遍历?

如何在Java作业中使用数组存储子类对象并循环调用方法?

嘿,我来帮你搞定这个数组的需求!首先你目前的Test类是逐个创建子类对象并输出信息,但作业要求用数组存储所有子类对象,再通过循环统一处理,其实改起来很简单,我给你一步步说明:

第一步:调整现有代码的小问题(可选但更规范)

你父类Dog里的name、age、coatColor用了static修饰,这其实不太合理——static是类级别的变量,所有狗对象会共享同一个值,但每只狗的名字、年龄、毛色都是独有的,所以应该改成实例变量。同时可以把抽象方法的名字改得更语义化,比如从name()改成printName(),避免和变量名混淆:

package objectsofaffection;
public abstract class Dog {
    // 改为实例变量,每个狗对象拥有自己的属性
    String name;
    String age;
    String coatColor;

    public abstract void printName();
    public abstract void printAge();
    public abstract void printCoatColor();
}

然后子类的构造函数可以用来给这些实例变量赋值,而不是直接在构造函数里调用打印方法(把打印逻辑留到循环里统一处理),比如DogBetty:

package objectsofaffection;
public class DogBetty extends Dog {
    public DogBetty() {
        // 在构造函数中给当前狗的属性赋值
        this.name = "Betty";
        this.age = "11 years";
        this.coatColor = "Brown";
    }

    @Override
    public void printName() {
        System.out.println("Dog Name: " + this.name);
    }

    @Override
    public void printAge() {
        System.out.println("Age: " + this.age);
    }

    @Override
    public void printCoatColor() {
        System.out.println("Coat Color: " + this.coatColor);
    }
}

其他子类(DogCarl、DogJoe、DogMollie)都按照这个逻辑修改,把属性赋值放在构造函数,打印逻辑留在重写的方法里。

第二步:修改Driver类(Test)使用数组和循环

核心思路是利用Java的多态特性:父类类型的数组可以存储所有子类对象。然后通过增强for循环遍历数组,逐个调用对象的方法即可:

package objectsofaffection;
public class Test {
    public static void main(String[] args) {
        // 创建Dog类型的数组,存入所有子类对象
        Dog[] dogs = new Dog[]{
            new DogBetty(),
            new DogJoe(),
            new DogCarl(),
            new DogMollie()
        };

        // 循环遍历数组,调用每个狗对象的打印方法
        for (Dog dog : dogs) {
            dog.printName();
            dog.printAge();
            dog.printCoatColor();
            System.out.println(); // 每只狗的信息之间加空行分隔
        }
    }
}

为什么这样做符合要求?

  • 用Dog[]数组统一存储了所有子类对象,满足作业中“使用数组存储所有子类对象”的要求;
  • 通过循环遍历数组,批量调用每个对象的方法,避免了重复的代码,也符合“通过循环打印每个对象的相关值或调用其方法”的要求;
  • 利用多态特性,父类引用可以指向子类对象,代码更简洁易维护。

内容的提问来源于stack exchange,提问作者Anthony Stem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:40:11