2012-01-14 1 views
5

Lo vedo nella diapositiva che mira ad illustrare i costruttori. Sono confuso ora perché ha due costruttori che hanno lo stesso job accept impostando gpa a zero nel secondo. Perché il programmatore deve ripetere ancora ? Perché questa classe ha bisogno di due costruttori?Perché questa classe ha due costruttori?

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

sarebbe meglio concatenamento: 'Student pubblico (int id, String name) {questo (id, nome, 0.0); } '- altrimenti le modifiche al codice devono avvenire due volte, e questo è male! – corsiKa

risposta

0

Il costruttore è in sovraccarico (stesso nome e ritorno tipo con diversi parametri cioè firma diversa) in modo che è possibile avviare un'istanza della classe in modi diversi. Uno con un GPA che si sceglie e un altro con un default GPA 0.0

0

Dispone di 2 costruttori in modo da poter creare uno studente come

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

o

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

Come accennato prima, questo è noto come sovraccarico del costruttore. È simile all'overloading delle funzioni, in quanto è possibile avere due funzioni con lo stesso nome, ma diverse firme, che fanno cose diverse.

In questo esempio, non fornire un GPA lo imposta su 0.0 (presumibilmente per essere modificato in seguito). Potrebbe accadere che alcuni metodi futuri dipendano dal fatto che il valore GPA è definito e questi due costruttori ottengono ciò.

0

Supponiamo promozione studente ha requisito come GPA dovrebbe essere presente, mentre l'aggiunta degli studenti, in questo caso si dovrà creare

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

Supponiamo alcune promozioni di classe non richiede GPA, promuovendo al contempo, allora il vostro studente l'oggetto sarà Student s= new Student(6,"stud2"); che implicitamente imposta gli studenti gpa come ZERO.

2

Ci sono 2 costruttori in quanto mostra il concetto di costruttore di sovraccarico:

Avere più di 1 costruttore (stesso nome e tipo di ritorno (costruttore ha tipo di classe come il suo tipo di ritorno di default)), ma con parametri diversi (diversa firma)

parametri dei costruttori o metodi di overload può variare in tipo e numero di parametri ... e anche la sequenza

le istanze della classe/oggetti creati invoca i costruttori al momento della creazione. così in quel momento si potrebbe fornire 2 o 3 parametri a seconda di quale costruttore che si desidera utilizzare .. se fornite 3 utilizza 3 parametri constructor..and 2 parametri allora utilizza 2 parametro del costruttore

Si tratta essenzialmente di la necessità di fornire talvolta gpa o talvolta no. quindi avere l'inizializzazione di oggetti con valori diversi.

11

Come per la maggior parte degli esempi artificiali, spesso non vi è alcuna ragione ovvia se non quella di dimostrare che il sovraccarico è possibile. In questo esempio, sarei tentato di refactoring il secondo costruttore in questo modo:

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