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
相关产品推荐
相关产品推荐

