elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Constructores en Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Constructores en Java  (Leído 6,505 veces)
Viky30

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Constructores en Java
« 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  ;)

   


En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Constructores en Java
« Respuesta #1 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
  1. public class Perro {
  2. private String name;
  3. private int height;
  4. }
  5.  

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
  1. public class Perro {
  2. private String name;
  3. private int height;
  4.  
  5. public void setName(String n) {
  6. this.name = n;
  7. }
  8. }
  9.  

y si quieres obtener el nombre del perro añades un método getter:

Código
  1. public class Perro {
  2. private String name;
  3. private int height;
  4.  
  5. public void setName(String n) {
  6. this.name = n;
  7. }
  8.  
  9. public String getName() {
  10. return this.name;
  11. }
  12. }
  13.  

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
  1. public class Perro {
  2. private String name;
  3. private int height;
  4.  
  5. public Perro (String n) {
  6. this.setName(n);
  7. }
  8.  
  9. public void setName(String n) {
  10. this.name = n;
  11. }
  12.  
  13. public String getName() {
  14. return this.name;
  15. }
  16. }
  17.  

Ahora cuando vallas a crear un nuevo objeto de tipo Perro entonces puedes inicializar el atributo nombre de na vez:

Código
  1. public class MainApp {
  2.  
  3. public static void main(String args[]) {
  4. Perro perro = new Perro("Otto");
  5. }
  6. }
  7.  

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
  1. public class Perro {
  2. private String name;
  3. private int height;
  4.  
  5. public Perro () {
  6. }
  7.  
  8. public Perro (String n) {
  9. this.setName(n);
  10. }
  11.  
  12. public Perro(String n, int a) {
  13. this.setName(n);
  14. this.setHeight(a);
  15.  
  16. }
  17.  
  18. public void setName(String n) {
  19. this.name = n;
  20. }
  21.  
  22. public String getName() {
  23. return this.name;
  24. }
  25.  
  26. public void setHeight(int n) {
  27. this.height = n;
  28. }
  29.  
  30.        public int getHeight() {
  31.                return this.height;
  32.        }
  33. }

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
  1. public class MainApp {
  2.  
  3. public static void main(String args[]) {
  4. Perro perro = new Perro();
  5. Perro perro1 = new Perro("Otto");
  6. Perro perro2 = new Perro("Otto", 30);
  7. }
  8. }
  9.  

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
  1. public void mostrarenlaconsole()

así que la forma correcta de usarlo es simplemente:

Código
  1. perro.mostrarenlaconsole();

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


« Última modificación: 24 Noviembre 2011, 19:25 pm por RyogiShiki » En línea

Viky30

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Constructores en Java
« Respuesta #2 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();
      
En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Constructores en Java
« Respuesta #3 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
  1. public Perro(String name,int alt){        // aqui me hace problema"int alt"
  2.      this.name = name;
  3.      this.alt = alt;
  4.   }
  5.  

Y este otro:

Código
  1. public Perro(String name,int patas) {     // y aqui tambien "int patas"
  2.      this.name = name;
  3.      this.patas= patas-1;
  4.  
  5.   }
  6.  

Los dos reciben como Parámetros un String y un entero, entonces si instanciamos dos Objeto:

Código
  1. Perro perro = new Perro("zenzi", 12);
  2. Perro perro = new Perro("cheroke", 4);  
  3.  

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
  1. public void setPatas (int asignarnumerodepatas){
  2.      int asignarnumerosdepatas = 0;
  3.      this.patas = asignarnumerosdepatas;
  4.   }
  5.  

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
  1. public void setPatas (int asignarnumerodepatas){
  2.      this.patas = asignarnumerosdepatas;
  3.   }
  4.  

Por ultimo recuerda poner el código dentro de las etiquetas GeSHi para que se vea mejor:

Saludos
« Última modificación: 25 Noviembre 2011, 00:15 am por RyogiShiki » En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Constructores en Java
« Respuesta #4 en: 27 Noviembre 2011, 17:37 pm »

@RyogiShiki  gracias que buen tutorial, de verdad, para que me queden mas claro cosas así  ;)


@Viky30     ;)
« Última modificación: 27 Noviembre 2011, 19:16 pm por RuB'n. » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Constructores en Java
« Respuesta #5 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
En línea

Breakbeat como forma de vida
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Constructores de clase
Programación Visual Basic
Gangrel 1 1,422 Último mensaje 22 Abril 2006, 01:56 am
por Gangrel
Constructores en vb.net???
.NET (C#, VB.NET, ASP)
Skeletron 3 10,901 Último mensaje 14 Octubre 2009, 03:55 am
por seba123neo
JAVA CONSTRUCTORES
Java
rodrigo619 2 3,040 Último mensaje 29 Abril 2010, 22:11 pm
por Debci
[C#] Heredar constructores
.NET (C#, VB.NET, ASP)
Siuto 6 11,456 Último mensaje 3 Octubre 2010, 18:53 pm
por [D4N93R]
constructores en java
Java
sauce19 7 5,734 Último mensaje 5 Septiembre 2011, 00:26 am
por [Case]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines