2012-01-14 10 views
5

Veo esto en la diapositiva que tiene como objetivo ilustrar constructores. Ahora estoy confundido porque tiene dos constructores que tienen el mismo trabajo y aceptan configurar gpa en cero en el segundo. ¿Por qué el codificador necesita repetir this.id = id; this.name = name; nuevamente? ¿Por qué esta clase incluso necesita dos constructores?¿Por qué esta clase tiene dos constructores?

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

estaría mejor encadenamiento: 'Estudiante pública (int id, String nombre) {este (id, nombre, 0.0); } '- de lo contrario, los cambios de código deben realizarse dos veces, ¡y eso es malo! – corsiKa

Respuesta

0

El constructor está sobrecargado (mismo nombre y tipo de retorno con diferentes parámetros es decir diferente firma) para que pueda iniciar una instancia de la clase de diferentes maneras. Uno con un promedio de calificaciones que elija y otro con un valor predeterminado GPA 0.0

0

Tiene 2 constructores para que pueda crear un estudiante como

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

o

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

Como se mencionó antes, este se conoce como sobrecarga de constructor. Es similar a la sobrecarga de funciones, ya que puede tener dos funciones con el mismo nombre, pero diferentes firmas, que hacen cosas diferentes.

En este ejemplo, no proporcionar un GPA lo establece en 0.0 (probablemente para ser cambiado más adelante). Podría darse el caso de que algún método futuro dependa del valor de GPA que sea definido, y estos dos constructores lo logran.

0

Supongamos promoción del estudiante tiene como requisito GPA debe estar presente mientras que la adición de los estudiantes, en ese caso va a crear

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

Vamos a suponer algunas promociones de clase no requiere GPA promoviendo al mismo tiempo, entonces su estudiante objeto será Student s= new Student(6,"stud2"); que la implicidad establece los estudiantes gpa como CERO.

2

Hay 2 constructores, ya que muestra el concepto de sobrecarga de constructor:

Tener más de 1 constructor (mismo nombre y tipo de retorno (constructor tiene tipo de clase como su tipo de retorno por defecto)) pero con diferentes parámetros (diferente firma)

parámetros de constructores o métodos sobrecargados puede variar en tipo y número de parámetros ... e incluso la secuencia

las instancias de los objetos que se crean invoca constructores al momento de la creación de clases /. lo que en ese momento se podría proporcionar 2 o 3 parámetros, dependiendo de qué constructor desea utilizar .. si proporciona 3 3 2 que utiliza parámetros parámetro constructor..and entonces se utiliza el parámetro del constructor 2

Es básicamente la necesidad de proporcionar a veces gpa o a veces no ... por lo tanto tener inicialización de objetos con valores diferentes ..

11

Como con la mayoría de los ejemplos inventados, a menudo no hay una razón obvia más que para mostrar que la sobrecarga es posible. En este ejemplo, estaría tentado a refactorizar el segundo constructor de esta manera:

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