我在幻灯片中看到了这一点,旨在说明构造函数。我现在很困惑,因为它有两个具有相同作业的构造函数接受在第二个中将gpa设置为零。为什么编码器需要再次重复this.id = id; this.name = name;
?为什么这个类甚至需要两个构造函数?
class Student{
private int id;
private String name;
private double gpa;
public Student(int id, String name, double gpa){
this.id = id; this.name = name; this.gpa = gpa;
}
public Student(int id, String name){
this.id = id; this.name = name; gpa = 0.0;
}
public boolean equals(Student other){
return id == other.id && name.equals(other.name)
&& gpa == other.gpa;
}
public String toString(){
return name + " " + id + " " + gpa;
}
public void setName(String name){
this.name = name;
}
public double getGpa(){
return gpa;
}
}
答案 0 :(得分:12)
与大多数人为的例子一样,除了表明超载是可能的之外,通常没有明显的理由。在这个例子中,我很想重构第二个构造函数:
public Student(int id, String name){
this( id, name, 0.0 );
}
答案 1 :(得分:2)
有2个构造函数,因为它显示了构造函数重载的概念:
有多个构造函数(相同的名称和返回类型(构造函数具有类型作为其默认返回类型))但具有不同的参数(不同的签名)
重载构造函数或方法的参数可以在类型和参数数量 ...甚至序列
中变化您创建的类/对象的实例在创建时调用构造函数。 所以在那个时候你可以提供2或3个参数,具体取决于你想要使用的构造函数。 如果你提供3它使用3参数构造函数和2参数,那么它使用2参数构造函数
基本上需要有时提供gpa或有时不提供... 因此初始化具有不同值的对象..
答案 2 :(得分:0)
构造函数被重载(具有不同参数的同名和返回类型,即不同的签名),因此您可以以不同的方式启动类的实例。一个是您选择的GPA,另一个是默认GPA 0.0
答案 3 :(得分:0)
它有2个构造函数,因此您可以创建像
这样的学生Student s = new Student(1, "Bob");
或
Student s = new Student(1, "Bob", 4.0);
答案 4 :(得分:0)
如前所述,这称为构造函数重载。它与函数重载类似,因为你可以有两个具有相同名称但不同签名的函数,它们可以做不同的事情。
在此示例中,未提供GPA将其设置为0.0(可能稍后更改)。可能的情况是,某些未来的方法取决于GPA值已定义,并且这两个构造函数实现了这一点。
答案 5 :(得分:0)
让我们假设学生晋升有加入学生时应该有gpa的要求,在这种情况下你会创建
Student s = new Student(5,"stud1",4.0);
让我们假设某些课程促销在推广时不需要gpa,那么你的学生对象将是Student s= new Student(6,"stud2");
,其隐含性将学生gpa设为ZERO。