jueves, 3 de junio de 2010

¿QUE ES HERENCIA?
Existen dos tipos de herencia sencilla y múltiple. Sencilla significa que sólo heredamos de una clase base, mientras que múltiple indica que tenemos varias clases base (por ejemplo un hidroavión hereda de barco y de avión). Java sólo soporta herencia simple.

SUPE Y THIS
this representa al objeto completo, en cambio super, sólo representa la parte heredada de la clase base.
Los constructores no son heredados, pero sí llamados. Es decir, cuando se construye un objeto de la clase derivada se llama al constructor de la clase derivada, pero antes de comenzar a ejecutarse se llama al constructor de la clase base, que tras ejecutarse continua la ejecución del constructor de la clase derivada.

/**
*
* @author MARY
*/
public class Main {

/**
* @param args the command line arguments
*/

public static void main(String[] args) {
// TODO code application logic here
// crear el objeto Cilindro
Punto punto;
circulo circulo1, circulo2;
punto = new Punto( 11, 22 );
System.out.println();

circulo1 = new circulo( 72, 29, 4.5 );
System.out.println();
circulo2 = new circulo( 5, 7, 10.67 );

punto = null; // se marca para la recolección de basura
circulo1 = null; // se marca para la recolección de basura

circulo2 = null; // se marca para la recolección de basura
System.out.println();
System.gc(); // llamar al recolector de basura


}
}

***********
package pruebaconstructorfinalizador;
import javax.swing.*;

/**
*
* @author MARY
*/
public class Punto {


private int x; // parte x del par de coordenadas

private int y; // parte y del par de coordenadas


// constructor sin argumentos

public Punto()

{

// la llamada implícita al constructor de Object ocurre aquí

System.out.println( "Constructor sin argumentos de Punto: " + this );

}


// constructor

public Punto( int valorX, int valorY )
{
// la llamada implícita al constructor de Object ocurre aquí

x = valorX; // no hay necesidad de validación
y = valorY; // no hay necesidad de validación
System.out.println( "Constructor de Punto: " + this );

}



// finalizador

protected void finalize()

{

System.out.println( "Finalizador de Punto: " + this );


}



// establecer x en el par de coordenadas

public void establecerX( int valorX )

{

x = valorX; // no hay necesidad de validación
}


// devolver x del par de coordenadas

public int obtenerX()

{

return x;
}
// establecer y en el par de coordenadas
public void establecerY( int valorY )

{

y = valorY; // no hay necesidad de validación
}


// devolver y del par de coordenadas

public int obtenerY()

{

return y;

}
// devolver la representación String del objeto Punto

public String toString()

{
return "[" + obtenerX() + ", " + obtenerY() + "]";
}
} // fin de la clase Punto

********
package pruebaconstructorfinalizador;

/**
*
* @author MARY
*/
public class circulo extends Punto {



private double radio; // el radio del Circulo


// constructor sin argumentos

/* public circulo()
{

// la llamada implícita al constructor de Punto ocurre aquí

System.out.println( "Constructor sin argumentos de Circulo: " + this );
}*/

// constructor
public circulo( int valorX, int valorY, double valorRadio )

{

super( valorX, valorY ); // llamar al constructor de Punto

establecerRadio( valorRadio );
System.out.println( "Constructor de Circulo: " + this );
}
// finalizador
protected void finalize()
{
System.out.println( "Finalizador de Circulo: " + this );

super.finalize(); // llamar al método finalize de la superclase

}
// establecer el radio

public void establecerRadio( double valorRadio )

{

radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );

}

// devolver el radio
public double obtenerRadio()
{

return radio;

}
// calcular y devolver el diámetro
public double obtenerDiametro()

{
return 2 * obtenerRadio();
}

// calcular y devolver la circunferencia

public double obtenerCircunferencia()

{
return Math.PI * obtenerDiametro();
}

// calcular y devolver el área

public double obtenerArea()
{

return Math.PI * obtenerRadio() * obtenerRadio();
}

// devolver la representación String del objeto Circulo

public String toString()

{

return "Centro = " + super.toString() + "; Radio = " + obtenerRadio();

}

} // fin de la clase Circulo

***
package pruebaconstructorfinalizador;

/**
*
* @author MARY
*/
public class circulo4 extends punto3 {


private double radio; // El radio de Circulo4



// constructor sin argumentos
/*public Circulo4()

{

// La llamada implícita al constructor de Punto3 ocurre aquí
} */



// constructor

public circulo4( int valorX, int valorY, double valorRadio )

{

super( valorX, valorY ); // llamar explícitamente al constructor de Punto3

establecerRadio( valorRadio );

}



// establecer el radio

public void establecerRadio( double valorRadio )

{

radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );

}



// devolver el radio

public double obtenerRadio()

{

return radio;

}



// calcular y devolver el diámetro

public double obtenerDiametro()

{

return 2 * obtenerRadio();

}



// calcular y devolver la circunferencia
public double obtenerCircunferencia()
{

return Math.PI * obtenerDiametro();

}



// calcular y devolver el área

public double obtenerArea()

{

return Math.PI * obtenerRadio() * obtenerRadio();
}



// devolver la representación String del objeto Circulo4
public String toString()

{

return "Centro = " + super.toString() + "; Radio = " + obtenerRadio();

}



} // fin de la clase Circulo4

*******
package pruebaconstructorfinalizador;

/**
*
* @author MARY
*/
public class punto3 {
private int x; // parte x de un par de coordenadas

private int y; // parte y de un par de coordenadas


// constructor sin argumentos

/* public Punto3()

{

// la llamada implícita al constructor de Object ocurre aquí
} */


// constructor


public punto3( int valorX, int valorY )

{

// la llamada implícita al constructor de Object ocurre aquí

x = valorX; // no hay necesidad de validación

y = valorY; // no hay necesidad de validación

}




// establecer x en el par de coordenadas

public void establecerX( int valorX )

{

x = valorX; // no hay necesidad de validación

}



// devolver x del par de coordenadas

public int obtenerX()

{

return x;

}



// establecer y en el par de coordenadas

public void establecerY( int valorY )

{

y = valorY; // no hay necesidad de validación

}



// devolver y del par de coordenadas

public int obtenerY()

{

return y;

}



// devolver la representación String del objeto Punto3

public String toString()
{

return "[" + obtenerX() + ", " + obtenerY() + "]";

}


} // fin de la clase Punto3
//

package pruebaconstructorfinalizador;
import java.text.DecimalFormat;
import javax.swing.JOptionPane;

1 comentario: