jueves, 4 de junio de 2009

Herencia multiple

Herencia multiple

La herencia multiple, consiste en la utilizacion de las propiedades de una clase a varias clases mas, lo que significa que en esta propiedad una sola clase padre puede heredarle atributos, u objetos de esta a varias clases hijo sin ninguna limitacion entre ellas.

El unico problema de la herencia multiple, es que es manejable en varias plataformas para programar, pero en Java no existe el concepto de la herencia multiple, osease que Java no es capas de manejar algun metodo para poder heredar a mas de una clase hija.

A continuación presento un ejemplo de Herencia multiple en C++

//clase punto3

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

// clase circulo 4 que hereda de clase punto3

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

// Prueba de la clase Cilindro.

import java.text.DecimalFormat;

import javax.swing.JOptionPane;

public class PruebaCilindro {

public static void main( String[] args )

{

// crear el objeto Cilindro

Cilindro cilindro = new Cilindro( 12, 23, 2.5, 5.7 );

// obtener las coordenadas x-y, radio y altura iniciales del Cilindro

String salida = "La coordenada X es " + cilindro.obtenerX() +

"\nLa coordenada Y es " + cilindro.obtenerY() + "\nEl radio es " +

cilindro.obtenerRadio() + "\nLa altura es " + cilindro.obtenerAltura();

cilindro.establecerX( 35 ); // establecer la nueva coordenada x

cilindro.establecerY( 20 ); // establecer la nueva coordenada y

cilindro.establecerRadio( 4.25 ); // establecer el nuevo radio

cilindro.establecerAltura( 10.75 ); // establecer la nueva altura

// obtener la representación String del nuevo valor de cilindro

salida +=

"\n\nLa nueva ubicación, radio y altura del cilindro son\n" +

cilindro.toString();

// dar formato a los valores de punto flotante con 2 dígitos de precisión

DecimalFormat dosDigitos = new DecimalFormat( "0.00" );

// obtener el diámetro del Cilindro

salida += "\n\nEl diámetro es " +

dosDigitos.format( cilindro.obtenerDiametro() );

// obtener la circunferencia del Cilindro

salida += "\nLa circunferencia es " +

dosDigitos.format( cilindro.obtenerCircunferencia() );

// obtener el área del Cilindro

salida += "\nEl área es " + dosDigitos.format( cilindro.obtenerArea() );

// obtener el volumen del Cilindro

salida += "\nEl volumen es " + dosDigitos.format( cilindro.obtenerVolumen() );

JOptionPane.showMessageDialog( null, salida ); // mostrar resultados

System.exit( 0 );

} // fin de main

} // fin de la clase PruebaCilindro

// La declaración de la clase Punto representa un par de coordenadas x-y.

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

// Declaración de la clase Circulo.

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

No hay comentarios:

Publicar un comentario