Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Feedeex en 8 Marzo 2011, 17:24 pm



Título: [DUDA]Constructores this() y super()
Publicado por: Feedeex en 8 Marzo 2011, 17:24 pm
Buenas, estoy aprendiendo JAVA y llegue a la parte de POO. Entonces, quiero ver si entendí el funcionamiento de estos 2. Tengo el siguiente código:

Código:
package prueba;

import java.awt.*;
public class Punto3D extends Point {
     public int z;
    public Punto3D(int x, int y, int z) {
         super(x, y);
         this.z = z;
     }

    public void move(int x, int y, int z) {
         this.z = z;
         super.move(x, y);
     }

    public void translate(int x, int y, int z) {
         this.z += z;
         super.translate(x, y) ;
     }

 }

• Importo la librería java.awt.* que contiene la parte gráfica.
• Creo una clase publica llamada Punto3D y extiendo sus valores usando los de su superclase Point (de java.awt).
Luego acá vienen mis dudas...

• ¿super() se utiliza para "decirle" a JAVA que asigne a x,y los valores de su superclase?. No lo entiendo muy bien.
• ¿this() se utiliza para decirle a JAVA que asigne a z el valor de su subclase?, es decir, ¿la que se pasa por parámetro llamando a la 'funcion'?.

Estuve buscando información, leí y llegué a ese punto pero... no comprendo el total funcionamiento de estos constructores aunque creo que tampoco estoy muy errado, ¿cierto?.

Muchas gracias.


Título: Re: [DUDA]Constructores this() y super()
Publicado por: Devilboy.Devil en 8 Marzo 2011, 20:26 pm
Buenas, estoy aprendiendo JAVA y llegue a la parte de POO. Entonces, quiero ver si entendí el funcionamiento de estos 2. Tengo el siguiente código:

Código:
package prueba;

import java.awt.*;
public class Punto3D extends Point {
     public int z;
    public Punto3D(int x, int y, int z) {
         super(x, y);
         this.z = z;
     }

    public void move(int x, int y, int z) {
         this.z = z;
         super.move(x, y);
     }

    public void translate(int x, int y, int z) {
         this.z += z;
         super.translate(x, y) ;
     }

 }

• Importo la librería java.awt.* que contiene la parte gráfica.
• Creo una clase publica llamada Punto3D y extiendo sus valores usando los de su superclase Point (de java.awt).
Luego acá vienen mis dudas...

• ¿super() se utiliza para "decirle" a JAVA que asigne a x,y los valores de su superclase?. No lo entiendo muy bien.
• ¿this() se utiliza para decirle a JAVA que asigne a z el valor de su subclase?, es decir, ¿la que se pasa por parámetro llamando a la 'funcion'?.

Estuve buscando información, leí y llegué a ese punto pero... no comprendo el total funcionamiento de estos constructores aunque creo que tampoco estoy muy errado, ¿cierto?.

Muchas gracias.


tienes un constructor:


Código:

string nombre;

public Constructor(string nombre)
{

    //como ves la variable de instancia se llama igual que el atributo del constructor
    // es aki cuando Debes usar this para asignarlos de la sig forma

    this.nombre = nombre;


}

sino kieres usar this ps asigna otros nombres de la sig forma:

Código:
string nombre;

public Constructor(string nombre_persona)
{

nombre = nombre_persona

}

ahora el uso de super es para poder usar los atributos del constructor de la clase base y poder usarlos en la clase heredada


ademas super se usa para ocupar metodos de otras clases o clases heredadas


Título: Re: [DUDA]Constructores this() y super()
Publicado por: Valkyr en 12 Marzo 2011, 02:07 am
Código:
 public Punto3D(int x, int y, int z) {
         super(x, y);
         this.z = z;
     }

En este constructor, puesto que la clase que estás creando es una subclase de Point (o clase hija), la primera línea de código debe ser una llamada a algún constructor de la clase padre (o superclase, como quieras llamarlo), así que la linea de super(x, y) se usa para invocar al constructor de la clase Point e inicializar así los atributos x e y puesto que estarán declarados como atributos privados y es la única forma que tienes de inicializarlos.

Por otro lado para inicializar el atributo que has declarado z(el cual, a no ser que tengas pensando ya algo que te obligue a declararlo como publico, te recomendaría que lo declarases privado para mantener el principio de ocultación) se hace con la línea this.z = z, la palabra this hace referencia a la estancia actual, es decir, la clase desde la que se llama al metodo (por ejemplo imaginate que creas un objeto de la clase Punto3D llamado P3 y quieres llamar a un método, por ejemplo "move", la llamada se realizaría P3.move(parámetros...) pues en ese caso this hará referencia a P3). En ese constructor en concreto está puesto así puesto que el parámetro se llama igual que el atributo y no podrías inicializar la variable escribiendo z = z puesto que es ambiguo, por eso se utiliza el this en este caso.

Por útlimo decirte, cuando quieres llamar a un método de la clase padre (estas llamadas a métodos de la clase padre se realizan, sobre todo, cuando estás redefiniendo un método y quieres ejecutar el código de la clase padre por lo que sea) se realiza mediante super.nombre del metodo.

En fin, espero haberte aclarado algo en todo esto. Suerte y si no te aclaras te recomiendo que leas más sobre cosas básicas de Java.

Saludos y suerte.