Почему этот класс имеет два конструктора? - PullRequest
5 голосов
/ 14 января 2012

Я вижу это на слайде, который предназначен для иллюстрации конструкторов. Теперь я в замешательстве, потому что у него два конструктора с одинаковым заданием, которые принимают значение 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 ]

12 голосов
/ 14 января 2012

Как и в большинстве надуманных примеров, зачастую нет очевидных причин, кроме как показать, что перегрузка возможна.В этом примере я бы испытал соблазн рефакторинга второго конструктора следующим образом:

 public Student(int id, String name){
    this( id, name, 0.0 );
  }
2 голосов
/ 14 января 2012

Существует 2 конструктора, так как он показывает концепцию перегрузки конструктора:

Имеет более 1 конструктора (с тем же именем и типом возврата (конструктор имеет тип класса в качестве возвращаемого типа по умолчанию)), но с другими параметрами (разные сигнатуры)

параметры перегруженных конструкторов или методов могут различаться в типе и количестве параметров ... и даже в последовательности

экземпляров класса / объектов, которыевы создаете вызывает конструкторы во время создания .. поэтому в то время вы могли бы предоставить 2 или 3 параметра в зависимости от того, какой конструктор вы хотите использовать .. если вы предоставите 3, он использует 3 параметра конструктора ... и 2 параметра, то он использует 2 параметраКонструктор

В основном необходимо иногда предоставлять gpa или иногда нет .. поэтому инициализация объектов с различными значениями ..

0 голосов
/ 14 января 2012

Предположим, что при продвижении студентов требуется добавление gpa при добавлении студента, в этом случае вы создадите

Student s = new Student(5,"stud1",4.0);

Предположим, что для некоторых групповых поощрений при продвижении не требуется gpa, тогда ваш ученик будет иметь значение Student s= new Student(6,"stud2");, что подразумевает, что ученики gpa равны нулю.

0 голосов
/ 14 января 2012

Как упоминалось ранее, это называется перегрузкой конструктора.Это похоже на перегрузку функций, в которой вы можете иметь две функции с одинаковыми именами, но с разными сигнатурами, которые выполняют разные функции.

В этом примере, если вы не предоставите GPA, установите его равным 0,0 (предположительно, для изменения).потом).Может случиться так, что какой-то будущий метод зависит от значения GPA , определенного , и эти два конструктора достигают этого.

0 голосов
/ 14 января 2012

Имеется 2 конструктора, поэтому вы можете создать ученика, например

Student s = new Student(1, "Bob");

или

Student s = new Student(1, "Bob", 4.0);
0 голосов
/ 14 января 2012

Конструктор перегружен (одно и то же имя и тип возвращаемого значения с разными параметрами, т.е. с другой подписью), так что вы можете инициировать экземпляр класса различными способами.Один с выбранным вами ГПД, а другой с ГПД по умолчанию 0,0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...