请老师帮忙看一下是否有需要改进的地方

请老师帮忙看一下是否有需要改进的地方

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;
	}
}

代码比较长,辛苦老师了!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小黑 2022-08-23 10:31:51

同学你好,

1.同学的运行效果有误,同学的运行效果如下图所示:

https://img1.sycdn.imooc.com//climg/63043bcb095aa7fb05540116.jpg

原因是在NonMotor类的有参构造方法中,没有将名为Color的参数赋值给color属性,建议同学在有参构造方法中调用setColor方法时,将Color参数传入setColor方法中,修改后代码如下图所示:

https://img1.sycdn.imooc.com//climg/63043bed09a224df08700279.jpg

2.当带参构造方法书写为:

public Bicycle(String brand,String color){
        setBrand(brand);
        setColor(color);
}

调用的是父类的set方法,是可以为属性进行赋值的,但不符合编程练习的要求:“在构造方法中调用父类多参构造,完成属性赋值”,建议同学按照编程练习的要求完成练习。

祝学习愉快!

  • 提问者 Masato1990 #1
    谢谢老师,那个Color是敲错了。。。应该是color
    2022-08-23 10:47:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师