Java中如何将继承Vehicle类的Moped对象加入ArrayList并完整打印
问题解决方案
一、父类属性未打印问题修复
问题原因
- 你在
Moped类中重写toString()方法时,没有调用父类Vehicle的toString()逻辑,所以只会输出子类自身定义的属性 - 现有代码存在3处拼写错误,会先触发编译失败:
Moped类的属性定义为private String Brand;,后续get/set方法中使用的是小写brand,大小写不匹配- 主方法中
lista.add(mp)变量名错误,你定义的集合变量名是list,多了末尾的a - 录入信息时
mp.setBrad(k)方法名拼写错误,正确方法名是setBrand
修复后的Moped类代码
package data; public class Moped extends Vehicle{ // 统一属性名小写,和后续get/set方法保持一致 private String brand; private String type; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand= brand; } public String getType() { return type; } public void setType(String type) { this.type = type; } // 重写toString时调用父类的toString方法,拼接父类属性输出 public String toString() { return "Brand: "+this.brand+" Type: "+this.type + " " + super.toString(); } }
二、添加多个Moped对象到ArrayList的实现
你可以通过循环控制录入次数,示例中先让用户输入要录入的助力车数量,再循环生成每个对象、录入信息后加入集合即可,修复后的主程序代码如下:
package app; import java.util.ArrayList; import java.util.Scanner; import data.*; public class ExtendsTest { // 将Scanner提为全局变量,避免每次录入都创建新对象 private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { ArrayList<Moped> list = new ArrayList<>(); // 询问用户需要录入的助力车数量 System.out.print("请输入要录入的助力车数量:"); int count = Integer.parseInt(scanner.nextLine()); // 循环录入count个Moped对象 for (int i = 0; i < count; i++) { System.out.println("=====录入第"+(i+1)+"台助力车信息====="); Moped mp = new Moped(); askForMopedInfo(mp); // 修正变量名拼写错误 list.add(mp); } System.out.println("=====录入完成,所有助力车信息如下====="); printMoped(list); scanner.close(); } private static void printMoped(ArrayList<Moped> list) { for (int i = 0; i < list.size(); i++) { System.out.println("第"+(i+1)+"台:"+list.get(i)); } } private static void askForMopedInfo(Moped mp) { System.out.print("Brand: "); String k = scanner.nextLine(); // 修正方法名拼写错误 mp.setBrand(k); System.out.print("Type: "); k = scanner.nextLine(); mp.setType(k); System.out.print("Price: "); // 适配父类price的float类型,用Float做类型转换 float price = Float.parseFloat(scanner.nextLine()); mp.setPrice(price); System.out.print("Color: "); k = scanner.nextLine(); mp.setColor(k); System.out.print("Maximum speed: "); int maxSpeed = Integer.parseInt(scanner.nextLine()); mp.setMaximumSpeed(maxSpeed); } }
Vehicle类本身逻辑无问题,不需要修改。
内容的提问来源于stack exchange,提问作者user15265939
相关产品推荐
相关产品推荐

