sábado, 4 de octubre de 2008

Java: Super y This

This:

En caso de que en una misma clase, dentro de un sub-ámbito se declare otro variable de mismo nombre que algún miembro dato, el puntero this nos sirve para apuntar al miembro dato distinguiéndolo del que se ha creado en el sub-ámbito.

class CRacional
{
int numerador;
int denominador;
//////////////////////

public CRacional(int numerador, int denominador)
{
this.numerador = numerador;
this.denominador = denominador;
}
}

En caso de llamarse distinto no es necesario utilizar el “this” para diferenciarlos:

public CRacional(int numeradorNuevo, int denominadorNuevo)
{
numerador = numeradorNuevo;
denominador = denominadorNuevo;
}

This viene a sustituir al nombre del objeto que esta ejecutando la instrucción.

Super:

En el caso de que una clase (hija) herede de otra (madre) y la clase hija defina un método que ya este definido en la clase madre (igual nombre y argumentos), el puntero super nos sirve para indicar que nos referimos al método de la madre. Si no lo utilizásemos el método de la hija ocultaría al de la clase madre.

Al igual que this sustituye al nombre del objeto, super substituye al nombre de la clase madre, por lo tanto si se utiliza directamente con los paréntesis (como un método) hará la función de llamar al constructor de la clase madre.

super(); //Llama al constructor sin argumentos de la clase madre.
super(pepe, 98); //Llama al constructor de la clase madre con 2 argumentos (String e Int).
super.metodo(); // Llama al método de la clase Madre.
metodo(); // Llama al método de la clase hija en caso de que en la hija se haya escrito este método tapando al de la madre. Si no se ha escrito la ejecución va al método de la madre.


NOTA:en cualquier clase que extienda a otra (herencia Hija-Madre) la primera línea del constructor de la hija tiene que ser una llamada al constructor de la madre con super(posibles argumentos).

4 comentarios:

Anónimo dijo...

Hola, mira estoy haciendo un master de programacion en EXITAE y te digo una cosa: explicas mejor tú...

;)

gracias

General Failure dijo...

Muchisimas Gracias!

Intente hacerlo facilmente legible, pero es complicado lograrlo.

;P

El Sonero o Sonista??? dijo...

Que tal korcho, varias preguntas... jejeje, mediante el método "super" como le haces para llamar a un constructor que acepta varios argumentos que no sea el por defecto, ejem.

class Mama{
String d;
int da;
char dat;
double dato;
/*este no lo quiero llamar*/
Ejemplo(){

}
/*Como llamas a este constructor*/
Ejemplo(String d, int da, char dat, double dato){
this.d=d;
this.da=da;
this.dat=dat;
this.dato=dato;
}
}

public class Hija extends Mama{

//como lo llamarías, como seria la sintaxis??????
}



GRACIAS POR RESPONDER

Anónimo dijo...

Sasasaa:

Lo llamas de la misma manera, javac se encargará de resolver a que constructor estás llamando, ya que como indicas estás realizando una sobrecarga de constructor.