为什么这个类有两个构造函数?

时间:2012-01-14 02:00:14

标签: java class methods constructor

我在幻灯片中看到了这一点,旨在说明构造函数。我现在很困惑,因为它有两个具有相同作业的构造函数接受在第二个中将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;
      }
    }

6 个答案:

答案 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。