Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: HumbertoAli en 24 de Marzo 2017, 23:02
-
A continuación mi planteamiento al siguiente ejercicio... Me seria de ayuda que me corrigieran ;)
Se plantea desarrollar un programa Java que permita representar la siguiente situación. Una instalación deportiva es un recinto delimitado donde se practican deportes, en Java interesa disponer de un método int getTipoDeInstalacion(). Un edificio es una construcción cubierta y en Java interesa disponer de un método double getSuperficieEdificio(). Un polideportivo es al mismo tiempo una instalación deportiva y un edificio; en Java interesa conocer la superficie que tiene y el nombre que tiene. Un edificio de oficinas es un edificio; en Java interesa conocer el número de oficinas que tiene.
Definir dos interfaces y una clase que implemente ambas interfaces para representar la situación anterior. En una clase test con el método main, crear un ArrayList que contenga tres polideportivos y dos edificios de oficinas y utilizando un iterator, recorrer la colección y mostrar los atributos de cada elemento. ¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?
Interface Edificio
public interface Edificio {
double getSuperficieEdificio();
}
Interface InstalacionDeportivapublic interface InstalacionDeportiva {
String getTipoDeInstalacion();
}
Clase abstracta InstalacionDeportes
public abstract class InstalacionDeportes {
private double superficie;
public InstalacionDeportes(double superficie){
this.superficie = superficie;
}
public InstalacionDeportes(){
}
public void setSuperficie(double superficie){
this.superficie = superficie;
}
public double getSuperficie(){
return superficie;
}
abstract public void mostrarDatos();
}
Clase Polideportivo
public class Polideportivo extends InstalacionDeportes implements InstalacionDeportiva,Edificio {
private String nombre;
public Polideportivo(String nombre, double superficie){
super(superficie);
this.nombre = nombre;
}
public void setNombre(String nombre){
this.nombre = nombre;
}
public String getNombre(){
return nombre;
}
public String getTipoDeInstalacion(){
return nombre;
}
public double getSuperficieEdificio(){
return super.getSuperficie();
}
public void mostrarDatos(){
System.out.println("Polideportivo:\n"+("Nombre: "+nombre)+("\nSuperficie: ")+getSuperficieEdificio()+(" metros cuadrados"));
System.out.print("\n");
}
}
Clase oficinaDeportiva
public class OficinaDeportiva extends InstalacionDeportes implements Edificio{
private int numeroDeOficinas;
public OficinaDeportiva(int numeroDeOficinas){
this.numeroDeOficinas = numeroDeOficinas;
}
public void setNumeroDeOficinas(int oficinas){
this.numeroDeOficinas = oficinas;
}
public int getNumeroDeOficinas(){
return numeroDeOficinas;
}
public double getSuperficieEdificio(){
return super.getSuperficie();
}
public void mostrarDatos(){
System.out.println("Oficina Deportiva:\n"+("Numero de Oficinas: "+numeroDeOficinas));
System.out.print("\n");
}
}
Clase TestInstalacionesDeportivas
import java.util.*;/**
*
* @author baseuser
*/
public class TestInstalacionesDeportivas {
public static void main(String[]args){
List <InstalacionDeportes> miLista = new ArrayList <InstalacionDeportes>();
InstalacionDeportes poli1 = new Polideportivo("Venezuela",7522.5);
InstalacionDeportes poli2 = new Polideportivo("URBAN",7850.5);
InstalacionDeportes poli3 = new Polideportivo("Valle de la pascua",7880.5);
InstalacionDeportes ofi1 = new OficinaDeportiva(50);
InstalacionDeportes ofi2 = new OficinaDeportiva(98);
miLista.add(poli1);miLista.add(poli2);miLista.add(poli3);miLista.add(ofi1);miLista.add(ofi2);
Iterator <InstalacionDeportes> it = miLista.iterator();
InstalacionDeportes tmp;
System.out.println("LISTA DE INSTALACIONES DEPORTIVAS.........");
while(it.hasNext()){
tmp = it.next();
tmp.mostrarDatos();
}
}
}
-
Buenas HumbertoAli, el ejercicio cumple con lo pedido aunque te indico algunas cosas
La clase InstalacionDeportes no sería necesaria, no es necesario tener una clase abstracta intermediaria. Las clases Polideportivo y OficinaDeportiva ya serían clases concretas.
Parece que hubieras utilizado esa clase abstracta para poder crear las instancias de objetos de la lista:
List <InstalacionDeportes> miLista = new ArrayList <InstalacionDeportes>();
Pero realmente podrías definir como tipo para la lista un tipo de interface, instanciando luego con una clase concreta:
ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
En este enlace puedes revisar una buena solución: https://www.aprenderaprogramar.com/foros/index.php?topic=2965.0
Salu2