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;
ok, muy bien!!!
ResponderEliminar