我正在为UCSDStudent制作一个构造函数,我发现我的构造函数没有问题。 请指出一些具体问题并帮助我做出自己的解决方案!
class UCSDStudent extends Base {
private String name;
private long Studentnum;
public UCSDStudent (String name, long number) {
UCSDStudent s = new UCSDStudent();
s.setName(name);
s.setStudentNum(number);
}
public void setName(String setName) {
name = setName;
}
public void setStudentNum(long setStudentNum){
Studentnum = setStudentNum;
}
public String getName () {
return this.name;
}
public long getStudentNum () {
return this.Studentnum;
}
....... // some more code, but I will put the instantiation in the main func.
// create Student and place in symbol table
if(!symtab.insert (
new UCSDStudent (buffer, number), 1)){
System.out.println("Couldn't insert " + "student!!!");
}
......
UCSDStudent stu = new UCSDStudent (buffer, 0);
这是基类。
public abstract class Base {
public String getName () { // identifier function
return null;
}
}
答案 0 :(得分:2)
声明
public UCSDStudent (String name, long number) {
UCSDStudent s = new UCSDStudent();
s.setName(name);
s.setStudentNum(number);
}
应改为
public UCSDStudent(String name, long number) {
this.setName(name);
this.setStudentNum(number);
}
没有理由在类构造函数中创建新的UCSDStudent
对象。在执行构造函数之后它实际上会丢失,并且永远不会保存传递给构造函数的值。
此外,您应该考虑Base
超类。如果它需要任何初始化,你应该从UCSDStudent
构造函数的第一行调用它的构造函数。
答案 1 :(得分:1)
public UCSDStudent (String name, long number)
{
UCSDStudent s = new UCSDStudent();
s.setName(name);
s.setStudentNum(number);
}
此代码无法编译,因为您正在调用UCSDStudent的默认构造函数,但尚未定义。如果定义带参数的构造函数,则必须定义默认构造函数。