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

Java对象数组中调用toString同时打印父类与子类属性的实现问题

Java车辆信息打印功能修复方案

问题根因

你目前打印子类实例只能输出特有属性,原因是子类重写toString()方法时没有调用父类的toString()实现,父类定义的名称、品牌、油箱容量属性没有被子类的toString方法拼接输出。另外Bus类存在属性缺失、构造函数参数不匹配的问题,会导致录入的车门数没有存储。

具体修改代码

1. 修复Car类

class Car extends Vehicle{
    int numOfdoors;
    int numOfWheels;

    public Car(){
        this(2,4,"","",10);
    }
    // 优化:调用父类构造函数完成父类属性赋值
    public Car(int numOfDoors, int numOfWheels, String name, String brand, int gasTank){
        super(name, brand, gasTank);
        this.numOfdoors = numOfDoors;
        this.numOfWheels = numOfWheels;
    }
    // 原有getter、setter、milesPerGallon方法保留不变

    @Override
    public String toString(){
        // 先拼接父类toString输出,再追加子类特有属性
        return super.toString() + "\nDoors: " + numOfdoors + " : Wheels " + numOfWheels;
    }
}

2. 修复Bus类

先补上缺失的车门数属性,修正构造函数参数逻辑,再修改toString方法:

class Bus extends Vehicle {
    int numOfDoors; // 补上录入时需要的车门数属性
    int numOfWheels;
    int numOfPassengers;

    public Bus(){
        this(1,8,30,"","", 50);
    }
    // 修正参数顺序和录入逻辑对齐:车门数、车轮数、载客数、名称、品牌、油箱容量
    public Bus(int numOfDoors, int numOfWheels, int numOfPassengers, String name, String brand, int gasTank){
        super(name, brand, gasTank);
        this.numOfDoors = numOfDoors;
        this.numOfWheels = numOfWheels;
        this.numOfPassengers = numOfPassengers;
    }
    // 原有getter、setter、milesPerGallon方法保留不变,补充numOfDoors的getter和setter

    @Override
    public String toString(){
        return super.toString() + "\nDoors: " + numOfDoors + " : Wheels " + numOfWheels + " : Passengers " + numOfPassengers;
    }
}

3. 对应修改main方法中Bus实例的创建逻辑

else{
    System.out.println("How many doors, wheels and passengers does the bus have?");
    int doors = kb.nextInt();
    int wheels = kb.nextInt();
    int passengers = kb.nextInt(); // 补上载客数录入
    
    System.out.println("What is the Name, brand and how big is the gas tank of the bus?");
    String name = kb.next();
    String brand = kb.next();
    int gasTank = kb.nextInt();
    
    Bus a = new Bus(doors,wheels,passengers,name,brand,gasTank);
    list[i] = a;
}

修改完成后运行代码,打印的内容就会先输出父类的公共属性,再输出对应子类的特有属性,符合你要求的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:36:05