请老师帮忙看一下是否有需要改进的地方
1.Test.java:
public class Test { public static void main(String[] args) { NonMotor nm = new NonMotor("天宇","红",4,2); Bicycle b = new Bicycle("捷安特","黄"); ElectricVehicle ev = new ElectricVehicle("飞鸽"); Tricycle t = new Tricycle(); System.out.print("父类信息测试:"+nm.work()); System.out.print("\n自行车类信息测试:"+b.work()); System.out.print("\n电动车类信息测试:"+ev.work()); System.out.print("\n三轮车类信息测试:"+t.work()); } }
2.NonMotor.java
public class NonMotor { // 私有属性:品牌、颜色、轮子(默认2个)、座椅(默认 1个) private String brand; private String color; private int numOfWheels = 2; private int numOfSeats = 1; // 无参构造方法 public NonMotor(){ } // 双参构造方法,完成对品牌和颜色的赋值 public NonMotor(String brand,String Color){ setBrand(brand); setColor(color); } // 四参构造方法,分别对所有属性赋值 public NonMotor(String brand,String Color,int numOfWheels,int numOfSeats){ setBrand(brand); setColor(color); setNumOfWheels(numOfWheels); setNumOfSeats(numOfSeats); } // 公有的get***/set***方法完成属性封装 public String getBrand(){ return brand; } public void setBrand(String brand){ this.brand = brand; } public String getColor(){ return color; } public void setColor(String color){ this.color = color; } public int getNumOfWheels(){ return numOfWheels; } public void setNumOfWheels(int numOfWheels){ this.numOfWheels = numOfWheels; } public int getNumOfSeats(){ return numOfSeats; } public void setNumOfSeats(int numOfSeats){ this.numOfSeats = numOfSeats; } // 方法:运行,描述内容为:这是一辆**颜色的,**牌的非机动车,有**个轮子,有**个座椅的非机动车。其中**的数据由属性提供 public String work() { String str = "这是一辆"+color+"颜色的,"+brand+"牌的非机动车,有"+numOfWheels+"个轮子,有"+numOfSeats+"个座椅"; return str; } }
3.Bicycle.java
这里有个问题,带参构造方法如果这样写是不是没有任何区别?
public Bicycle(String brand,String color){ setBrand(brand); setColor(color);
public class Bicycle extends NonMotor { // 在构造方法中调用父类多参构造,完成属性赋值 public Bicycle(){ } public Bicycle(String brand,String color){ super(brand,color); } // 重写运行方法,描述内容为:这是一辆**颜色的,**牌的自行车。其中**的数据由属性提供 public String work() { String str = "这是一辆"+getColor()+"颜色的,"+getBrand()+"牌的自行车"; return str; } }
4.ElectricVehicle.java
public class ElectricVehicle extends NonMotor { // 私有属性:电池品牌 private String brandOfBattery; // 公有的get***/set***方法完成属性封装 public ElectricVehicle(){ } public ElectricVehicle(String brandOfBattery){ setBrandOfBattery(brandOfBattery); } public String getBrandOfBattery(){ return brandOfBattery; } public void setBrandOfBattery(String brandOfBattery){ this.brandOfBattery = brandOfBattery; } // 重写运行方法,描述内容为:这是一辆使用**牌电池的电动车。其中**的数据由属性提供 public String work() { String str = "这是一辆使用"+getBrandOfBattery()+"牌电池的电动车"; return str; } }
5.Tricycle.java
public class Tricycle extends NonMotor { // 在无参构造中实现对轮子属性值进行修改 public Tricycle(){ this.setNumOfWheels(3); } // 重写运行方法,描述内容为:三轮车是一款有**个轮子的非机动车。其中**的数据由属性提供 public String work() { String str = "三轮车是一款有"+getNumOfWheels()+"个轮子的非机动车"; return str; } }
代码比较长,辛苦老师了!
8
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小黑
2022-08-23 10:31:51
同学你好,
1.同学的运行效果有误,同学的运行效果如下图所示:
原因是在NonMotor类的有参构造方法中,没有将名为Color的参数赋值给color属性,建议同学在有参构造方法中调用setColor方法时,将Color参数传入setColor方法中,修改后代码如下图所示:
2.当带参构造方法书写为:
public Bicycle(String brand,String color){ setBrand(brand); setColor(color); }
调用的是父类的set方法,是可以为属性进行赋值的,但不符合编程练习的要求:“在构造方法中调用父类多参构造,完成属性赋值”,建议同学按照编程练习的要求完成练习。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星