Frage Warum hat diese Klasse zwei Konstruktoren?


Ich sehe das in der Folie, die Konstrukteure veranschaulichen soll. Ich bin jetzt verwirrt, weil es zwei Konstruktoren hat, die den gleichen Job akzeptieren, gpa in der zweiten auf Null zu setzen. Warum muss der Coder wiederholt werden? this.id = id; this.name = name; nochmal? Warum benötigt diese Klasse sogar zwei Konstruktoren?

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;
      }
    }

5
2018-01-14 02:00


Ursprung


Antworten:


Wie bei den meisten erfundenen Beispielen gibt es oft keinen offensichtlichen Grund, außer zu zeigen, dass die Überladung möglich ist. In diesem Beispiel wäre ich versucht, den zweiten Konstruktor wie folgt umzuformen:

 public Student(int id, String name){
    this( id, name, 0.0 );
  }

11
2018-01-14 02:09



Es gibt 2 Konstruktoren, da es das Konzept des Überladens von Konstruktoren zeigt:

Mehr als 1 Konstruktor (gleicher Name und Rückgabetyp (Konstruktor hat Klassentyp als Standard-Rückgabetyp)) aber mit anderen Parametern (unterschiedliche Signatur)

Parameter von überladenen Konstruktoren oder Methoden können variieren Art und Anzahl der Parameter... und sogar die Sequenz

Die Instanzen der Klasse / Objekte, die Sie erstellen, ruft Konstruktoren zum Zeitpunkt der Erstellung auf. zu diesem Zeitpunkt könnten Sie 2 oder 3 Parameter angeben, abhängig davon, welchen Konstruktor Sie verwenden möchten. Wenn Sie 3 angeben, werden 3 Parameterkonstruktor und 2 Parameter verwendet, dann wird der 2-Parameterkonstruktor verwendet

Es ist im Grunde das Bedürfnis, manchmal gpa oder manchmal nicht zu liefern. daher Initialisierung von Objekten mit unterschiedlichen Werten.


2
2018-01-14 02:08



Der Konstruktor ist überladen (gleicher Name und Rückgabetyp mit unterschiedlichen Parametern, d. H. Unterschiedliche Signatur), so dass Sie eine Instanz der Klasse auf verschiedene Arten initiieren können. Eines mit einem GPA, das Sie wählen, und ein weiteres mit einem Standard-GPA von 0.0


0
2018-01-14 02:02



Es hat 2 Konstruktoren, so dass Sie einen Student wie erstellen können

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

oder

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

0
2018-01-14 02:04



Wie bereits erwähnt, wird dies als Konstruktorüberladung bezeichnet. Es ist vergleichbar mit dem Überladen von Funktionen, da Sie zwei Funktionen mit demselben Namen haben können, aber unterschiedliche Signaturen, die verschiedene Dinge tun.

In diesem Beispiel wird ein GPA nicht auf 0.0 gesetzt (vermutlich später geändert). Es könnte der Fall sein, dass eine zukünftige Methode vom GPA-Wert abhängt definiertund diese beiden Konstrukteure erreichen das.


0
2018-01-14 02:05



Lassen Sie uns annehmen, dass die Studentenwerbung die Anforderung hat, dass gpa beim Hinzufügen des Studenten anwesend sein sollte, in diesem Fall werden Sie erstellen

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

Lassen Sie uns annehmen, dass einige Klassenpromotionen kein gpa während der Promotion erfordern, dann wird Ihr Studentenobjekt sein Student s= new Student(6,"stud2");  welche Implikation setzt Schüler gpa als NULL.


0
2018-01-14 02:07