sách gpt4 ăn đã đi

java - 在给定的代码块中查找错误(类的扩展,个人/学生)

In lại 作者:搜寻专家 更新时间:2023-11-01 02:21:05 30 4
mua khóa gpt4 giày nike

在下面的代码块中,有几个(故意的)错误,我的任务是找到它们并解释这些错误是否会导致编译代码时出现问题,或者至少会导致一些逻辑问题。

lớp công khai Person {

chuỗi tên riêng tư;

public Person(String name) {

name = name;

}

công khai String toString() {

return "Name: " + name;

}
}

public class Student expands Person {

private int Nr;

public Student(String name, int Nr) {

name = name;

Nr = Nr;

}

công khai String toString() {

return toString() + " Nr: " + Nr;

}
}

据我所知,第一个错误是在 Người 类的第四行。虽然 name = name 不应导致编译错误,但它应该会产生逻辑问题,因为构造函数 tên 的形参覆盖了对象变量 tên 我们事先定义的。实际代码将是 this.name = name

除此之外,我没有发现 Người 类有任何问题。

“Student”类中的第一个错误是关键字expands,应该是mở rộng。它应该会导致编译错误。

在构造函数Student中,我们写name = name。我不确定这是否会导致逻辑/编译错误。也许有人可以帮我解决这个问题?无论如何,我们应该在这里通过编写 super(name) 来调用父类(super class),因为父类(super class) Người 中已经给出了学生的 tên .

再一次,我们要写this.Nr = Nr

最后但同样重要的是,我们不想返回 toString() + ...,因为,好吧,我猜这会调用方法 toString()无限频繁并导致堆栈溢出。

Tôi đã bỏ lỡ điều gì à?

câu trả lời hay nhất

你的分析是正确的。

Học sinh 的构造函数中你只遗漏了一个错误

public Student(String name, int Nr) {
name = name;
Nr = Nr;
}

将其更改为

public Student(String name, int Nr) {
this.name = tên;
Nr = Nr;
}

将生成一个不可编译的代码,因为在父类(super class)中tên是一个私有(private)字段,所以在类Học sinh中是不可见的。

Để ý:虽然将变量 Nr 命名为大写 N 并不是错误,但它违反了变量命名的常见最佳实践。变量或方法应以小写字母开头。类或接口(interface)应以大写字母开头。


@Julian,不仅仅是写作

public Student(String name, int Nr) {
super(name);
this.Nr = Nr;
}

会起作用,但也是必要的。因为父类(super class)不公开默认构造函数。所以Học sinh类需要显式调用父类(super class)的构造函数。

关于java - 在给定的代码块中查找错误(类的扩展,个人/学生),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42363743/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress