繁体   English   中英

在 Java 和 toString 方法中创建一个基本的 class

[英]Creating a basic class in Java and the toString method

我是 Java 的新手,并且通过一些编码作业来更好地理解。 在这个特殊的例子中,我正在制作一辆汽车 class 以使其符合以下 UML:

-make: String
-year: int
-speed: double

+Car(m:String,y:int)
+toString(): String
+getMake(): String
+getSpeed(): double
+getYear(): int
+accelerate(): void
+brake(): void

首先,我在 class 中创建三个实例变量:一个 int 保存汽车的 model 年份,一个 String 保存汽车的品牌,一个 double 保存汽车的速度。 这些应列为私有。

接下来,我将创建一个接受 model 年份的构造函数,并将速度设置为 0。请注意,构造函数的参数应该与实例变量的名称不同,或者在将参数值放入时使用“this”限定符实例变量。

到目前为止,这是我按照给定说明编写的代码:

    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(){

所以我的第一个问题是——如何使用“this”关键字将速度设置为零? 我应该在构造函数下做 speed=0 吗?

我的下一个问题是关于以下指令:“对 toString 方法进行编码。此方法不应带参数,并且应返回使用 String.format 方法生成的字符串:

String.format("A %d %s 正在以 %.1f mph 的速度行驶", year, make, speed)

现在,编译您的汽车 class 并更正任何错误

因此,我对 toString 格式和 String.format 进行了研究,但不确定将其放置在代码中的哪个位置。 是否只是公共 static void main(String[] args) 之后的一行?

所以我的第一个问题是——如何使用“this”关键字将速度设置为零? 我应该这样做 this.year=0 吗?

是的。

在 java 中,每个 Object 都有toString()方法。 如果您不覆盖它,它将为您提供 class 名称和 hash 代码。 要覆盖方法,您需要在方法之前添加@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);
    }
}

如何使用“this”关键字将速度设置为零? 我应该这样做 this.year=0 吗?

是的,因为构造函数不接受任何参数来设置速度,所以这样做是有意义的:

this.speed = 0 // or speed = 0 since there is no conflict in name with the incoming parameters

所以你的Car class 的构造函数看起来像:(我更喜欢使用this关键字,因为它可以帮助我保持一致并且知道当我看到它时我正在处理一个实例变量。)

public Car(int year, String make) {
   this.year = year;
   this.make = make;
   this.speed = 0;
}

java 中的每个 class 都有一个toString方法的默认实现。

toString() 的默认行为是打印 class 名称,然后是 @,然后是 object 的 hash 代码的无符号十六进制表示。

如果您想要不同的行为,可以覆盖该方法:

@Override
public String toString() {
    return String.format("A %d %s that is going %.1f mph", year, make, speed);
}

这将包含在Car class 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM