java – 查找给定代码块中的错误(类,人/学生的扩展)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 查找给定代码块中的错误(类,人/学生的扩展),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1651字,纯文字阅读大概需要3分钟。
内容图文
![java – 查找给定代码块中的错误(类,人/学生的扩展)](/upload/InfoBanner/zyjiaocheng/811/dfc03771d2dd45f59cb8bfbff6a45e63.jpg)
在下面的代码块中,有几个(预期的)错误,我的任务是找到它们并解释在编译代码时错误是否会导致问题,或者至少是某些逻辑问题.
public class Person {
private String name;
public Person(String name) {
name = name;
}
public String toString() {
return "Name: " + name;
}
}
public class Student expands Person {
private int Nr;
public Student(String name, int Nr) {
name = name;
Nr = Nr;
}
public String toString() {
return toString() + " Nr: " + Nr;
}
}
据我所知,第一个错误是在Person类的第四行.虽然name = name不会导致编译错误,但它应该给出逻辑问题,因为构造函数名称的形式参数会覆盖我们事先定义的对象变量名称.实际的代码是this.name = name.
除此之外,我在类Person中没有看到任何问题.
类’Student’中的第一个错误是关键字expa??nds,它应该是扩展的.它应该导致编译错误.
在构造函数Student中,我们写了name = name.我不确定这是否会导致逻辑/编译错误.也许有人可以帮我解决这个问题吗?无论如何,我们应该通过编写super(name)来调用超类,因为学生的名字已经在超类Person中给出了.
再一次,我们想写这个.Nr = Nr.
最后但并非最不重要的是,我们不想返回toString()…,因为,我想这会经常无限地调用方法toString()并导致堆栈溢出.
我错过了什么?
解决方法:
你的分析是正确的.
您在Student的构造函数中只错过了一个错误
public Student(String name, int Nr) {
name = name;
Nr = Nr;
}
把它改成
public Student(String name, int Nr) {
this.name = name;
Nr = Nr;
}
将生成一个不可编译的代码,因为在超类名称中是私有字段,因此在类Student中不可见.
注意:虽然命名变量Nr与上N的错误并不是错误,但这与变量命名的常见最佳实践相反.变量或方法应以较低的字母开头.类或接口应以大写字母开头.
@Julian,不仅写作
public Student(String name, int Nr) {
super(name);
this.Nr = Nr;
}
会工作,但也是必要的.因为超类不公开默认构造函数.所以类Student需要以这种方式显式调用超类的构造函数.
内容总结
以上是互联网集市为您收集整理的java – 查找给定代码块中的错误(类,人/学生的扩展)全部内容,希望文章能够帮你解决java – 查找给定代码块中的错误(类,人/学生的扩展)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。