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:
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.
Cita de: 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:
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:
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:
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
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.