请老师帮忙看一下是否有需要改进的地方
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方法,是可以为属性进行赋值的,但不符合编程练习的要求:“在构造方法中调用父类多参构造,完成属性赋值”,建议同学按照编程练习的要求完成练习。
祝学习愉快!
2023版Java工程师
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星