2014-02-06 26 views
-2

我正在为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

你可以请你的错误发布实际的堆栈跟踪? – mdewitt

+5

我们应该告诉你问题吗?通常不是这样吗? –

+0

那么问题是,你正在调用一个函数,要求提供不同数量的参数。但是由于这段代码没有显示任何有趣的内容,因此没有完整的错误信息,等等。我们真的帮不了你。 – Xarn

回答

1
public UCSDStudent (String name, long number) 
{ 
    UCSDStudent s = new UCSDStudent(); 
    s.setName(name); 
    s.setStudentNum(number); 
} 

此代码不可能编译,因为你在呼唤UCSDStudent,你还没有定义的默认构造函数。如果您定义了一个带参数的构造函数,则必须定义一个默认构造函数。

+0

它应该进行编译,因为缺省构造函数是“默认”定义的,除非在超类(Base)中有参数需要设置(例如,最终值),在这种情况下并不是这种情况。 – PNS

+1

@PNS:如果定义了带参数的构造函数,那么没有默认的构造函数。 –

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构造函数的第一行调用它的构造函数。

+0

基类现在更新了这个问题。 – seoyoochan

+0

不客气。由于Base类没有需要参数的构造函数,因此代码很好。否则,你必须在UCSDStudent构造函数的第一行使用任何参数放在......的位置来调用super(...)。 – PNS

相关问题