-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
Clase 4Constructores
Inicializacin de Objetos Constructores- Qu son los
Constructores?- Constructor default.- Constructores con argumentos-
Sobrecarga de constructores- Cadena de invocacin a
constructores
Usos y diferencias entre:- this y this()- super y super()
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
ConstructoresPara crear un objeto se utiliza el operador new. La
creacin e inicializacin deun objeto involucra los siguientes
pasos:
a) Se aloca espacio para la variableb) Se aloca espacio para el
objeto en la HEAP y se inicializan los atributos con valores por
defecto.c) Se inicializan explcitamente los atributos del objeto.d)
Se ejecuta el constructor (parecido a un mtodo y tiene el mismo
nombre de la clase)f) Se asigna la referencia del nuevo objeto a la
variable.
nullMemoria STACK
0x99f311
Memoria STACK Memoria HEAP
auto
000
marcaprecio
null0.0
a) b),c),d),e) Objeto Vehiculo
public class Test {public static void main(String args[]){
Vehiculo auto;auto = new Vehiculo();
}}
public class Vehiculo {private String marca;private double
precio;. . .}
auto
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
public class Vehiculo {private String marca;private double
precio;public Vehiculo() {}}
Qu son los Constructores?Los constructores son piezas de cdigo
-sintcticamente similares a los mtodos- quepermiten definir un
estado inicial especfico de un objeto en el momento de su
creacin.Se diferencian de los mtodos tradicionales porque:
Deben tener el mismo nombre que la clase. La regla de que el
nombre de losmtodos debe comenzar con minscula, no se aplica a los
constructores.
No retornan un valor. Son invocados automticamente.
La inicializacin est garantizada: cuando un objeto es creado, se
aloca almacenamientoen la memoria HEAP y se invoca al
constructor.
Vehiculo v = new Vehiculo(); El operador new() se puede utilizar
en cualquier lugar del cdigo.
NO retorna valor
- La expresin new retorna una referencia al objeto creado
recientemente, pero el constructor noretorna un valor.- Java
siempre llama automticamente a un constructor cuando crea un objeto
(antes de que el objetosea usado). De esta forma la inicializacin
del objeto est garantizada.
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
public class Vehiculo {private String marca;private double
precio;//mtodos
}
Constructor sin argumentos
Si una clase NO tiene constructores, el compilador inserta
automticamente unconstructor default, con cuerpo vaco:
Cuando se compilapublic Vehiculo(){}
Cuando se crea un objeto de la clase Vehiculo, con new
Vehiculo(), se invocar elconstructor por defecto, an cuando no se
encuentre explcitamente en la clase.
Si la clase tiene al menos un constructor, con o sin argumentos,
el compilador NOinsertar nada.
Un constructor sin argumento o constructor Default, es usado
para crear un objeto bsico.
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
Constructores con argumentosEn general los constructores son
usados para inicializar los valores del objeto que se estcreando.
Cmo especificar los valores para la inicializacin? Los
constructores puedentener parmetros para la inicializacin de un
objeto.
Si este constructor es el nico de la clase, el compilador no
permitir crear un objetoVehiculo de otra manera que no sea usando
este constructor .
public class Automotores {public static void main(String[]
args){ Vehiculo auto1 = new Vehiculo(CITROEN, 13500.00);Vehiculo
auto2 = new Vehiculo(HONDA,12400.50);
}}
public class Vehiculo {private String marca;private double
precio;public Vehiculo(String mar, double pre){marca = mar;precio =
pre;}}
public Vehiculo(String marca, double precio) {
this.marca = marca;this.precio = precio;
}
Codificaciones equivalentes
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
Sobrecarga de ConstructoresQu pasa si se quiere construir un
objeto Vehiculo de distintas maneras?Se escriben en la clase ms de
un constructor sobrecarga de constructores.public class Vehiculo
{private String nroPatente=;private String
propietario=SinDueo;public Vehiculo(){}public Vehiculo(String
marca){
this.marca = marca;}public Vehiculo(String marca,double
precio){this.marca = marca;this.precio = precio;}} public class
Botanico {public static void main(String[] args){
Vehciulo a1=new Vehiculo();Vehiculo a2=new
Vehiculo(HONDA);Vehiculo a3=new Vehiculo(HONDA,12300.50);
}}
La sobrecarga de mtodos permite que el mismo nombre de mtodo
sea
usado con distintos tipos y cantidad de argumentos.
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
this() y this
Cuando dentro de una clase, hay ms deun constructor, puede
surgir la necesidadde llamarse entre ellos para evitar
duplicarcdigo. Para hacer esto puede usarsethis(), el cual hace una
llamada alconstructor de la misma clase que coincidacon al lista de
argumentos.
this() public class Vehiculo {private String marca;private
double precio;public Vehiculo(String marca){this.marca = marca;
}public Vehiculo(String marca,
double precio){this(marca);this.precio = precio;
}
Si tenemos 2 objetos de la clase Vehiculo, llamados a1 y a2 e
invocamos al mtodosetNroPatente() sobre ambos objetos, cmo sabe el
mtodo para que objetos sellama?
Vehiculo a1 = new Vehiculo();Vehiculo a2 = new Vehiculo();. . .
a1.setMarca( CITROEN);a2.setMarca( HONDA);
El compilador agrega como 1 argumento de cada mtodo una
referencia al objeto que est siendo
manipulado.
a1a2
this
// debe estar en la 1 lnea
public class Vehiculo {private String marca;private String
precio;. . .public setMarca(String marca){this.marca = marca;
}}
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
Cmo se construye un objeto?Recorriendo la jerarqua de herencia
en forma ascendente e invocando alconstructor de la superclase
desde cada constructor, en cada nivel de lajerarqua de clases:
Cadena de invocacin a constructores
crear un objeto de tipo Object
crear un objeto de tipo Vertebrado
crear un objeto de tipo Mamifero
crear un objeto de tipo Perro
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perro
new Perro()
Constructor de Mamfero()
En cada constructor de una clase derivada, debe existir una
llamada a un constructor de la superclase.
Constructor de Vertebrado()
Constructor de Object()
Estoy listo!
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
public class Perro extends Mamifero{. . public
Perro(){System.out.println(Constructor de Perro);
}public void comer(){ }}
super()public class Mamifero extends Vertebrado {
public Mamifero(){System.out.println(Constructor de
Mamifero);
}public void comer(){}
}
super()
El compilador Java, automticamente invoca en cada constructor de
unaclase derivada, al constructor nulo de su clase base, si no se
invocninguno explcitamente.
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perro
super()
super()
super()
new Perro()
public class Vertebrado {public Vertebrado
(){System.out.println(Constructor de Vertebrado);
}}
Cul sera la salida de la ejecucin de new Perro()?
super()
Cadena de invocacin a constructores
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
public class Perro extends Mamifero{. . public
Perro(){System.out.println(Constructor de Perro);
}public void comer(){ }}
super()public class Mamifero extends Vertebrado {
public Mamifero(){System.out.println(Constructor de
Mamifero);
}public void comer(){}
}
super()
Error!!
Qu pasa si Vertebrado tiene un constructor con argumentos y no
tiene el constructor sin argumentos (default)?
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perronew Perro()
public class Vertebrado {public Vertebrado (int
i){System.out.println(Constructor de Vertebrado);
}}
super()
Desde el constructor de Mamifero se debe invocar a alguno de los
constructoresexistentes en la superclase Vertebrado usando la
palabra clave super() y la lista deargumentos apropiada.
Cmo hacemos?
super()
super()
super()
Cadena de invocacin a constructores
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
public class Vertebrado {private int cantpatas;public
Vertebrado(int c){
cantpatas = c; System.out.println(Constructor de
Vertebrado);
}public void comer(){}
}
public class Perro extends Mamifero{. . public
Perro(){System.out.println(Constructor de Perro);
}public void comer(){ }}
super()public class Mamifero extends Vertebrado {
public Mamifero(){super(4);System.out.println(Constructor de
Mamifero);
}public void comer(){}
}
super()
Si un constructor no invoca a ningn constructor de la clase
base, el compilador inserta lainvocacin al constructor nulo
(super()).Si un constructor invoca explcitamente a un constructor
de la superclase, debe hacerloen la primera lnea de dicho
constructor.
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perro
super(4)
super()
super()
Perro p = new Perro()
Qu pasa si Vertebrado tiene un constructor con argumentos y no
tiene el constructor sin argumentos (default)? continuacin
Cadena de invocacin a constructores
-
Algoritmos y Estructuras de Datos 2015 Taller de JAVA Prof:
Laura Fava Jorge Rosso
super() y super
Super() invoca a un constructor de lasuperclase y debe estar en
la primer lneade cdigo del constructor.JAVA garantiza la correcta
creacin de losobjetos ya que los constructores siempreinvocan a los
constructores de lasuperclase. De esta manera todo objetocontiene
una referencia al objeto de lasuperclase habilitando la herencia
deestado y comportamiento.
super()
Todos los mtodos de instancia disponen de la variable super
(adems de this), lacual contiene una referencia al objeto padre. La
palabra clave super, permite invocardesde la subclase un mtodo de
la superclase.
super
public class Perro extends Mamifero {private String sonido;
public Perro(){super(4);sonido=new String(guau);
}. . .
}
se invoca al constructor de Mamifero con argumento entero.
En este ejemplo, el cdigo del constructorPerro() espera hasta
que el padre se inicialicepara continuar con su cdigo.