我是Java的新手,为了更好地理解,我完成了一些编码任务。在这个特定的例子中,我正在制作一个Car类,以便它符合以下UML:
-make: String
-year: int
-speed: double
+Car(m:String,y:int)
+toString(): String
+getMake(): String
+getSpeed(): double
+getYear(): int
+accelerate(): void
+brake(): void
首先,我在类中创建三个实例变量:一个保存汽车年款的int,一个保存车辆品牌的String,一个保持汽车速度的double。这些应该列为私有。
接下来,我将创建一个构造函数,该构造函数接受模型年份并生成并将速度设置为0。请注意,构造函数的参数应该是与实例变量不同的名称,或者使用";这个";将参数的值放入实例变量时使用的限定符。
到目前为止,这是我按照给定说明编写的代码:
public class Car
{
private int year;
private String make;
private double speed;
public Car(String make, int year) {
this.make = make;
this.year = year;
speed = 0;
public String toString(){
所以我的第一个问题是——我如何使用";这个";关键字?我应该在构造函数下执行speed=0吗?
我的下一个问题是关于以下指示:;对toString方法进行编码。此方法不应包含任何参数,并且应返回使用string.format方法生成的字符串:
字符串格式("正在以%.1f英里/小时运行的%d%s",年份,品牌,速度(
现在,编译你的汽车类并更正任何错误
因此,我已经对toString格式和String.format进行了研究,但不确定将其放在代码中的何处。它会只是公共静态void main(String[]args(后面的一行吗?
所以我的第一个问题是——如何使用";这个";关键字?我应该这么做吗?year=0?
是。
在java中,每个Object都有toString()
方法。如果您不覆盖它,它将为您提供类名和哈希代码。要覆盖方法,您需要在方法之前添加@override
。最终结果应该是这样的:
public class Car {
private int year;
private String make;
private double speed;
public Car(int year, String make) {
this.year = year;
this.make = make;
this.speed = 0;
}
@Override
public String toString() {
return String.format("A %d %s that is going %.1f mph", year, make, speed);
}
}
如何使用;这个";关键字?我应该这么做吗?year=0?
是的,因为构造函数不接受任何参数来设置速度,所以这样做是有意义的:
this.speed = 0 // or speed = 0 since there is no conflict in name with the incoming parameters
因此,Car
类的构造函数看起来应该是:(我更喜欢使用this
关键字,因为它可以帮助我保持一致,并在看到实例变量时知道我正在处理它。(
public Car(int year, String make) {
this.year = year;
this.make = make;
this.speed = 0;
}
java中的每个类都有一个to to String方法的默认实现。
toString((的默认行为是打印类名,然后是@,然后是对象哈希代码的无符号十六进制表示。
如果你想要不同的行为,你可以覆盖方法:
@Override
public String toString() {
return String.format("A %d %s that is going %.1f mph", year, make, speed);
}
这将包含在Car
类中。