Título: Constructores en Java Publicado por: Viky30 en 24 Noviembre 2011, 15:29 pm Hola, soy nueva en el forum, estoy aprendiendo a programear ytengo un problema para entender la funcion que cumplen los constructores en una clase,se como se crean pero para que sirven? como veran abajo tengo una clase Test y un main metodo y mas abajo mi clase Perro,en clase test he creado dos perros nuevos, en clase perro un metodo mostrarenlaconsola, dentro de este metodo utilizo el this que hace referencia a la variable de instancia, mi programa hasta ahora funciona bien. Pero si creo constructores en que cambiaria mi programa?
public class Test { public static void main (String[] args){ Perro perro1 = new Perro(); perro1.name="tuki"; perro1.alt=12; perro1.mostrarenlaconsole(perro1); Perro perro2 =new Perro(); perro1.name="tuki"; perro1.alt=12; perro2.mostrarenlaconsole(perro2); } public class Perro { public String name; public int alt; public void mostrarenlaconsole(){ System.out.println("name="+ this.name); System.out.println("alt=" + this.alt); } } Muchas gracias por las rptas ;) Título: Re: Constructores en Java Publicado por: RyogiShiki en 24 Noviembre 2011, 15:58 pm Hola Bienvenida al Foro.
Bueno, la funcionalidad de un constructor básicamente es la de construir el objeto y que dependiendo de los parámetro que se pasen este se cree de una u otra forma. Por ejemplo una clase perro: Código
Los atributos de la clase son las propiedades que el objeto posee, en este caso el nombre y la altura. Estos se suelen declarar de manera privada para dar un acceso limitado a ellos, es lo que se conoce como encapsulación, y para editar sus valores se suele hacer lo que se llama métodos accesores (accesors) también conocidos como setters y getters, los setters asignan un valor al atributo, y getters obtienen dicho valor. Entonces digamos que le quieres poner un nombre al perro, añades un setter de la siguiente manera: Código
y si quieres obtener el nombre del perro añades un método getter: Código
Ahora digamos que a la hora de instanciar o crear el objeto quieres de una vez inicializar el nombre de Perro, entonces en ese momento creas un constructor con parámetros el constructor se llamará cada vez que un objeto de tipo Perro (en este caso) sea creado o instanciado. Agregamos el constructor, que no tiene tipo y lleva el mismo nombre de la clase, y suele ser público: Código
Ahora cuando vallas a crear un nuevo objeto de tipo Perro entonces puedes inicializar el atributo nombre de na vez: Código
Pero eso quiere decir que todos los objetos de tipo Perro que crees han de llevar el el valor de atributo nombre a la hora de instanciar, si quieres evitar esto, entonces los constructores se pueden sobrecargar, lo que quiere decir que vas a tener varios constructores que reciben distintos parámetros, así puedes tener los siguientes: Código
Como verás he agregado un setter y un getter también para la altura, además de un constructor vacío para crear el Objeto sin inicializar ninguno de sus atributos. El anterior código nos permite entonces crear Objetos de tipo Perro de la siguiente forma: Código
Como verás entonces los constructores se usan para ejecutar los procesos de inicialización de un objeto, que en principio para objetos simples suele ser la inicialización de sus atributos Si no especificas un constructor Java agregara un constructor vacío que recibe el nombre de constructor por defecto. Por último tienes un pequeño error al usar el método mostrar por consola, donde le pasas un parámetro de tipo perro, pero como ves este no recibe parámetros: Código
así que la forma correcta de usarlo es simplemente: Código
Te darás cuenta que a medida que avanzas en el Lenguaje el tema de los constructores se va haciendo cada vez un poco más complejo, esto a la hora de usar Interfaces, Enums, o construir Objetos con constructores de clases heredadas usando el tipo de mayor rango (esto es en todo caso conceptos propios de la POO) Saludos Título: Re: Constructores en Java Publicado por: Viky30 en 24 Noviembre 2011, 22:32 pm HOla muchas gracias por tu rapida respuesta, me kedo una duda y es la sgte kiere decir que por cada nuevo objeto, se debe crear un nuevo constructor no? pero que pasaria si agregro una nueva variable de instancia privada "patas",luego le agrego getters y setters, luego armo un nuevo tercer constructor con los parametros string name , int patas y me muesta un error... "Esta es la clase Perros" public class Perro { private String name; private int alt; private int patas; public Perro(String name){ this.name = name; } public Perro(String name,int alt){ // aqui me hace problema"int alt" this.name = name; this.alt = alt; } public Perro(String name,int patas) { // y aqui tambien "int patas" this.name = name; this.patas= patas-1; } public void setName (String asignarnombre){ this.name = asignarnombre; } public String getName(){ return this.name; } public void setAlt (int asignaredad){ this.alt=asignaredad; } public int getAlt (){ return this.alt; } public void setPatas (int asignarnumerodepatas){ int asignarnumerosdepatas = 0; this.patas = asignarnumerosdepatas; } public int getPatas (){ return this.patas; } public void mostrarenlaconsole(){ System.out.println("name="+ name); System.out.println("alt=" + alt); System.out.println("patas="+ patas); } "Esta es la clase test, con mi metodo main" public class Test { public static void main (String[] args){ Perro perro1 = new Perro("tuki"); perro1.mostrarenlaconsole(); Perro perro2 =new Perro("zenzi",12); perro2.mostrarenlaconsole(); Perro perro3=new Perro("cheroke",4); perro3.mostrarenlaconsole(); Título: Re: Constructores en Java Publicado por: RyogiShiki en 24 Noviembre 2011, 22:58 pm Hola que tal.
Bueno creo que se me olvido mencionarlo en el primer post. El problema esta en que no puedes repetir dos constructores exactamente iguales osea que reciben los mismos parametros. Mira: Este constructor: Código
Y este otro: Código
Los dos reciben como Parámetros un String y un entero, entonces si instanciamos dos Objeto: Código
Entonces Java no sabrá a cual de los dos constructores te estas refiriendo, si al que setea las patas o al que setea la altura. Java no tiene manera de saber cual de los dos constructores usar. Te sugiero que solo hagas dos constructores que seteen los atributos más importantes, y el resto de atributos sean seteados con los setters. Ahora en esta parte: Código
Fíjate que le pasas un parámetro que es el número de patas, pero justo antes de asignarlo le pones un valor de 0, esto hará que el número de patas siempre sea 0 es suficiente haciendolo así: Código
Por ultimo recuerda poner el código dentro de las etiquetas GeSHi para que se vea mejor: (http://i56.tinypic.com/34erlw6.png) Saludos Título: Re: Constructores en Java Publicado por: rub'n en 27 Noviembre 2011, 17:37 pm @RyogiShiki gracias que buen tutorial, de verdad, para que me queden mas claro cosas así ;)
@Viky30 ;) (http://i.elhacker.net/i?i=QUskpaVYi8StM-NLutvDO2Vo) (http://i.elhacker.net/d?i=QUskpaVYi8StM-NLutvDO2Vo) Título: Re: Constructores en Java Publicado por: satu en 27 Noviembre 2011, 18:27 pm @RyogiShiki explicas muy bien, de verdad que así explicado uno se entera mejor. Ojalá los profesores lo hicieran así.
Saludos |