Está en la página 1de 12

Algoritmos y Estructuras de Datos 2013 Taller de JAVA Prof: Laura A.

Fava
Clase 4
Constructores
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 2013 Taller de JAVA Prof: Laura A. Fava
Constructores
Para crear un objeto se utiliza el operador new. La creacin e inicializacin de
un objeto involucra los siguientes pasos:
a) Se aloca espacio para la variable
b) Se aloca espacio para el objeto en la HEAP y se inicializanlos atributos convalores por defecto.
c) Se inicializanexplcitamente 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.
null
Memoria STACK
0x99f311
Memoria STACK Memoria HEAP
auto
0
0
0
mar ca
precio
null
0.0
a)
b),c),d),e)
Objeto Vehiculo
publ i c cl ass Test {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] ) {
Vehiculo auto;
auto = new Vehiculo();
}
}
publ i c cl ass Vehiculo {
private String mar ca;
private double pr eci o;
. . .
}
auto
Algoritmos y Estructuras de Datos 2013 Taller de JAVA Prof: Laura A. Fava
publ i c cl ass Vehiculo {
private String mar ca;
private double pr eci o;
publ i c Vehiculo() {
}
}
Qu son los Constructores?
Los constructores son piezas de cdigo -sintcticamente similares a los mtodos- que
permitendefinir un estado inicial especficode un objeto en el momento de su creacin.
Se diferenciande los mtodos tradicionales porque:
Deben tener el mismo nombre que la clase. La regla de que el nombre de los
mtodos debe comenzar con minscula, no se aplica a los constructores.
No retornanun valor.
Soninvocados automticamente.
La inicializacin est garantizada: cuando un objeto es creado, se aloca almacenamiento
enla 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
Nota: la expresin new retorna una referencia a objeto creado
recientemente, pero el constructor no retorna un valor.
Algoritmos y Estructuras de Datos 2013 Taller de JAVA Prof: Laura A. Fava
publ i c cl ass Vehiculo {
private String mar ca;
private double pr eci o;
/ / mt odos
}
Constructor sin argumentos
Si una clase NO tiene constructores, el compilador inserta automticamente un
constructor default, con cuerpo vaco:
Cuando se compila
public Vehiculo(){
}
Cuando se crea un objeto de la clase Vehiculo, con new Vehiculo(), se invocar el
constructor 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 NO
insertar nada.
Un constructor sin argumento o constructor Default, es usado para crear un objeto
bsico.
Algoritmos y Estructuras de Datos 2013 Taller de JAVA Prof: Laura A. Fava
Constructores con argumentos
En general los constructores son usados para inicializar los valores del objeto que se est
creando. Cmo especificar los valores para la inicializacin? Los constructores pueden
tener parmetros para la inicializacinde un objeto.
Si este constructor es el nico de la clase, el compilador no permitir crear un objeto
Vehiculo 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 2013 Taller de JAVA Prof: Laura A. Fava
Sobrecarga de Constructores
Qu pasa si se quiere construir un objeto Vehiculo de distintas maneras?
Se escriben en la clase ms de un constructor sobrecarga de constructores.
publ i c cl ass Vehiculo {
private St r i ng nr oPat ent e=;
private St r i ng pr opi et ar i o=Si nDueo;
publ i c Vehiculo(){
}
publ i c Vehiculo(String marca){
t hi s. mar ca = mar ca;
}
publ i c Vehiculo(String marca,double precio){
t hi s. mar ca = mar ca;
t hi s. pr eci o = pr eci o;
}
}
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 2013 Taller de JAVA Prof: Laura A. Fava
this() y this
Cuando dentro de una clase, hay ms de
un constructor, puede surgir la necesidad
de llamarse entre ellos para evitar duplicar
cdigo. Para hacer esto puede usarse
this(), el cual hace una llamada al
constructor de la misma clase que coincida
conal lista de argumentos.
this()
public class Vehiculo {
pr i vat e St r i ng mar ca;
pr i vat e doubl e pr eci o;
publ i c Vehiculo(String marca){
t hi s. mar ca = mar ca;
}
publ i c Vehiculo(String marca,
double precio){
this(marca);
t hi s. pr eci o = pr eci o;
}
Si tenemos 2 objetos de la clase Vehiculo, llamados a1 y a2 e invocamos al mtodo
setNroPatente() sobre ambos objetos, cmo sabe el mtodo para que objetos se
llama?
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.
a1
a2
this
// debe estar en la 1 lnea
public class Vehiculo {
pr i vat e St r i ng mar ca;
pr i vat e St r i ng pr eci o;
. . .
publ i c set Mar ca( St r i ng mar ca) {
this. mar ca = mar ca;
}
}
Algoritmos y Estructuras de Datos 2013 Taller de JAVA Prof: Laura A. Fava
Cmo se construye un objeto?
Recorriendo la jerarqua de herencia en forma ascendente e invocando al
constructor de la superclase desde cada constructor, en cada nivel de la
jerarqua de clases:
Cadena de invocacin a constructores
crearunobjetodetipoObject
crearunobjetodetipoVertebrado
crearunobjetodetipoMamifero
crearunobjetodetipoPerro
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 2013 Taller de JAVA Prof: Laura A. Fava
public class Perro extends Mamifero{
. .
public Perro(){
System.out.println(Constructor de Perro);
}
publ i c voi d comer ( ) { }
}
super()
public class Mamifero extends Vertebrado {
public Mamifero(){
System.out.println(Constructor de Mamifero);
}
publ i c voi d comer ( ) {
}
}
super()
El compilador Java, automticamente invoca en cada constructor de una
clase derivada, al constructor nulo de su clase base, si no se invoc
ninguno 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 2013 Taller de JAVA Prof: Laura A. Fava
public class Perro extends Mamifero{
. .
public Perro(){
System.out.println(Constructor de Perro);
}
publ i c voi d comer ( ) { }
}
super()
public class Mamifero extends Vertebrado {
public Mamifero(){
System.out.println(Constructor de Mamifero);
}
publ i c voi d 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 Perro
new 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 constructores
existentes en la superclase Vertebrado usando la palabra clave super() y la lista de
argumentos apropiada.
Cmo hacemos?
super()
super()
super()
Cadena de invocacin a constructores
Algoritmos y Estructuras de Datos 2013 Taller de JAVA Prof: Laura A. Fava
public class Vertebrado {
private int cantpatas;
public Vertebrado(int c){
cantpatas = c;
System.out.println(Constructor de Vertebrado);
}
publ i c voi d comer ( ) {}
}
public class Perro extends Mamifero{
. .
public Perro(){
System.out.println(Constructor de Perro);
}
publ i c voi d comer ( ) { }
}
super()
public class Mamifero extends Vertebrado {
public Mamifero(){
super(4);
System.out.println(Constructor de Mamifero);
}
publ i c voi d comer ( ) {}
}
super()
Si un constructor no invoca a ningn constructor de la clase base, el compilador inserta la
invocacin al constructor nulo (super()).
Si un constructor invoca explcitamente a un constructor de la superclase, debe hacerlo
en 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 2013 Taller de JAVA Prof: Laura A. Fava
super() y super
Super() invoca a un constructor de la
superclase y debe estar en la primer lnea
de cdigo del constructor.
J AVA garantiza la correcta creacin de los
objetos ya que los constructores siempre
invocan a los constructores de la
superclase. De esta manera todo objeto
contiene una referencia al objeto de la
superclase habilitando la herencia de
estado y comportamiento.
super()
Todos los mtodos de instancia disponen de la variable super (adems de this), la
cual contiene una referencia al objeto padre. La palabra clave super, permite invocar
desde la subclase un mtodo de la superclase.
super
public class Perro extends Mamifero {
pr i vat e St r i ng soni do;
publ i c Per r o( ) {
super(4);
soni do=new St r i ng( guau) ;
}
. . .
}
se invoca al constructor de
Mamiferocon
argumento entero.
En este ejemplo, el cdi go del constructor
Perro() espera hasta que el padre se i nici alice
para continuar con su cdigo.

También podría gustarte