lasFiguras $ !" " " ! "$ $ ( ! $ " ! # !" %&" ' " $ " ! # % !" ( )*+ # , - . / , ' 0 % 1 # # % $ ! 0 % # 0 %& %& % . # %& %& ' ( 0 % % % 3 $( ! 2 % %! ' ! !" " ! !" " 5 % $ %!& ! " " % package lasFiguras; import java.util.*; import java.awt.geom.*; public class Figura{ protected String tipo, color; protected Point2D.Double centro; … public Figura (String tipo, String color, Point2D.Double centro){…} public Figura{…} public String tipo() {…} public String color() {…} public Point2D.Double centro() {…} public void setColor(String nuevoColor) {…} public void setCentro(Point2D.Double nuevoCentro) {…} public String toString() {…} public boolean equals(Object x) {…} public static Figura leer(Scanner teclado){…} } 4 % protected ! 3 % % / % 7 8 % 8 9 2 5 % %& private 8 % % 0 public class Figura { … public static Figura leer(Scanner teclado){ Figura res = null; System.out.println("*** LEYENDO FIGURA DESDE TECLADO ***"); System.out.println("Pulse: \n"); System.out.println("1 para leer Círculo"); System.out.println("2 para leer Rectángulo"); System.out.println("3 para leer Cuadrado"); System.out.println("0 para salir ......."); int opcion = teclado.nextInt(); if ( opcion == 1 ) res = Circulo.leer(teclado); else if ( opcion == 2 ) res = Rectangulo.leer(teclado); else if (opcion == 3) res = Cuadrado.leer(teclado); return res; } 6 + ! % % + public class TestLeerFigura{ public static void main(String args[]){ Scanner teclado = new Scanner(System.in); teclado.useLocale(Locale.US); Circulo c = Figura.leer(teclado); % incompatible types–found Figura but expected Circulo Rectangulo r = Figura.leer(teclado); Cuadrado sq : = Figura.leer(teclado); } public class Figura { … public boolean equals(Object x){ return (this.tipo.equals(((Figura)x).tipo)); } … } ;/ <@ & <+ % % > + %! > + ! # = ?/ <@ & 0 = 0 = ! 2 ; ? 2 C B extends 5 % super % % 0 public class Circulo extends Figura {…} public class Rectangulo extends Figura {…} public class Cuadrado extends Rectangulo {…} ) % 3 0 0 0 % / % % % % 3 / / ! public class Circulo extends Figura { // Además de tipo, color y centro, un Círculo ES UNA Figura que TIENE UN protected double radio; … // Sobrescribe toString() de Figura para incluir el radio de un Círculo public String toString() {...} // Además de los que hereda y sobrescribe de Figura, un Círculo tiene sus métodos propios public Circulo(double r,String co,Point2D.Double ce){...} public Circulo(){...} public double radio(){...} public void setRadio(double nuevoRadio){...} public double area(){...} public double perimetro(){...} public boolean menorQue(Circulo x){...} public static Circulo leer(Scanner teclado){...} } A + 7& D 2 % ! /( . #% 0 . public Derivada () { super(); } % . ! 3 $ ( #% ! % '/ ! ! public Circulo(double radio,String color,Point2D.Double centro){ super("Círculo", color, centro); this.radio = r; } public Circulo(){ super(); this.radio = RADIO_POR_DEFECTO; } ! public Figura(String tipo,String color,Point2D.Double centro){ this.tipo = tipo; this.color = color; this.centro = centro; } public Figura(){ this(TIPO_POR_DEFECTO,COLOR_POR_DEFECTO,CENTRO_POR_DEFECTO); } E (! %& 3 "% %& % % 3 2 % % %! .// #% %& ! % 3 % " . ! F9FGD public String toString(){ return “Circulo de radio "+radio+" color"+color+" centro“ + centro.toString(); } % 3 $' } %& ! %# %& ( public String toString(){ return "Figura de tipo "+tipo+" color"+color+" centro“ + centro.toString(); % % 3 %! (! C ! # ! 8G-+5 GD public String toString(){ return super.toString()+“ y radio "+radio; } / 4 Ejercicio 2: " ( % ! public class Circulo{ private String tipo; double radio; public Circulo(double r){ this.radio=r;this.tipo="Círculo"; public Circulo(double r,String t){this.radio=r;this.tipo=t; public double area(){ return Math.PI * radio * radio; } public double perimetro(){ return 2 * Math.PI * radio; } public String toString(){ return "Círculo de radio "+radio; } public class Cilindro extends Circulo{ private double altura; public Cilindro(double radioBase, double altura){...} public double area(){ return 2*Math.PI*radio*radio + 2*Math.PI*radio*altura; } public double volumen(){ return Math.PI*radio*radio*altura; } ; "% % ! $ . ;/ < ?/ < &% + # ! % } } } } ! ! 895 = % + = super(radioBase,"Cilindro"); this.altura = altura; super.radio=radioBase;super.tipo="Cilindro";this.altura=altura; A/ 6 % / )* + % 8-( + % ! / % . + ( - )* + . 60 .F * HG