// Lab26.java (c) 2012 adolfo@di-mare.com /** @(#)Lab26.java 2012 Ejemplo de métodos polimórficos con herencia. @author Adolfo Di Mare */ // import java.util.Random; /** Clase que contiene el programa principal {@code main()}. */ public class Lab26 { /** Programa principal. */ public static void main( String args[] ) { Punto P; P = new Punto(); P.traslade(15, 72); Circulo C; C = new Circulo(); C.traslade(10, 80); C.radio(34.3); Cilindro T; T = new Cilindro(); T.traslade( 5, 16); T.radio( 2.5); T.altura(5.7); // Tarro Punto VEC[] = new Punto[3]; VEC[0] = P; VEC[1] = C; VEC[2] = T; int i=1; for (int j=0; j<7; ++j) { i = (i+2)%3; // i = rand.nextInt(3); System.out.print( "\nVEC[" + (i) + "] ==> " + VEC[i].nombre() ); if ( VEC[i].nombre() != P.nombre() ) { System.out.print( "\n mi area es " + ((Circulo)(VEC[i])).area() ); } } System.out.println(); } /** Simula el assertTrue() de JUnit. */ public static boolean assertTrue( boolean expr ) { return expr; } } /** Punto de coordenadas (x,y) */ class Punto { /** Coordenada X del punto */ private int m_x; /** Coordenada Y del punto */ private int m_y; /** Constructor. */ public Punto() { m_x = m_y = 0; } /** Cambia coordenadas */ public void traslade( int x, int y ) { m_x = x; m_y = y; } /** Obtiene la coordenada "X" */ public int X() { return m_x; } /** Obtiene la coordenada "X" */ public int Y() { return m_y; } /** Nombre de la clase del objeto. */ String nombre() { return "soyPunto"; } } /// Clase derivada del Punto. class Circulo extends Punto { /** Radio del círculo */ private double m_radio; /** Constructor. */ public Circulo() { super(); m_radio = 0.0; } /** Obtiene el radio del círculo */ public double radio() { return m_radio; } /** Establece el radio del círculo */ public void radio( double radio) { if ( radio>=0.0 ) { m_radio = radio; } } /** Calcula el área del círculo */ public double area() { return ( Math.PI * m_radio * m_radio ); } /** Nombre de la clase del objeto. */ String nombre() { return "soyCirculo"; } } /// Clase derivada del Circulo. class Cilindro extends Circulo { /** Radio del círculo */ private double m_altura; /** Constructor. */ public Cilindro() { super(); m_altura = 0.0; } /** Obtiene el altura del Cilindro */ public double altura() { return m_altura; } /** Establece el altura del Cilindro */ public void altura( double altura) { if ( altura>=0 ) { m_altura = altura; } } /** Calcula el área del Cilindro */ public double area() { return 2 * super.area() + ( 2 * Math.PI * radio() ) * m_altura; } /** Calcula el área del volumen */ public double volumen() { return super.area() * m_altura; } /** Nombre de la clase del objeto. */ String nombre() { return "soyCilindro"; } } // NOTA: Para ejecutar use el comando: // > java Lab26 // [en la pantalla de interacciones del DrJava] // Jeliot: // - http://cs.joensuu.fi/jeliot/javaws/jeliot.jnlp /* EOF: Lab26.java */