Buenas noches. Aquí dejo el ejercicio CU00697B del curso Java desde cero.
EJERCICIO
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.
El código de la interfaz "InstalacionDeport":
public interface InstalacionDeport{
int getTipoDeInstalacion();
}
El código de la inteface "Edificio":
public interface Edificio{
double getSuperficieEdificio();
}
El código de la clase "Polideportivo":
public class Polideportivo implements InstalacionDeport, Edificio{
private String nombre;
private int tipoDeInstalacion;
private double largo;
private double ancho;
public Polideportivo(String nombre, int tipoDeInstalacion, double largo, double ancho){
this.nombre = nombre;
this.tipoDeInstalacion = tipoDeInstalacion;
this.largo = largo;
this.ancho = ancho;
}
public String getNombre(){return nombre;}
public int getTipoDeInstalacion(){return tipoDeInstalacion;} //Sobreescribir el método abstracto de la interface
public double getLargo(){return largo;}
public double getAncho(){return ancho;}
public double getSuperficieEdificio(){ //Sobreescribir el método abrastracto de la interface
double area = 0;
area = largo*ancho;
return area;
}
public String toString(){ //Sobreescribimos el método "toStirng" de la superclase "Object"
Integer tmp01 = tipoDeInstalacion;
Double tmp02 = getSuperficieEdificio();
return "El polideportivo: "+nombre+" es de tipo de instalacion: "+tmp01.toString()+" y una superficie de: "+tmp02.toString();
}
}
El código de la clase "EdificioOficinas":
public class EdificioOficinas implements Edificio{
private int numeroOficinas;
private double largo;
private double ancho;
public EdificioOficinas(int numeroOficinas){
this.numeroOficinas = numeroOficinas;
largo = 0;
ancho = 0;
}
public void setLargo(double largo){
this.largo = largo;
}
public void setAncho(double ancho){
this.ancho = ancho;
}
public int getNumeroOficinas(){return numeroOficinas;}
public double getSuperficieEdificio(){ //Implementamos el método "getSuperficieEdificio()"
double area = 0;
area = largo*ancho;
return area;
}
public String toString(){ //Sobreescribimos el método "toString()"
Double tmp = getSuperficieEdificio();
return "El edificio tiene: "+numeroOficinas+" oficinas.";
}
}
El código de la clase main "TestInterface":
import java.util.Iterator;
import java.util.ArrayList;
public class TestInteface{
public static void main(String []Args){
Edificio polideportivo1 = new Polideportivo("Marbella",2,250,125);
Edificio polideportivo2 = new Polideportivo("Sant Josep",1,200,90);
Edificio polideportivo3 = new Polideportivo("Argentina",4,370,190);
Edificio edificioOficinas1 = new EdificioOficinas(10);
Edificio edificioOficinas2 = new EdificioOficinas(420);
ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
listaEdificios.add(polideportivo1);
listaEdificios.add(polideportivo2);
listaEdificios.add(polideportivo3);
listaEdificios.add(edificioOficinas1);
listaEdificios.add(edificioOficinas2);
Iterator<Edificio> it = listaEdificios.iterator();
while(it.hasNext()){
System.out.println(it.next().toString());
}
}
}
¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?
Entre la clase "Polideportivo" con las interfeces "InstalacionDeport" y "Edificio".
Tenía una duda, por qué no puedo acceder desde la clase "TestInterface" a los métodos de los objetos creados? Es decir, añadiendo esta línea en la clase "TestInterface":
edificioOficinas1.setLargo(29);
y el código se quedaría así:
import java.util.Iterator;
import java.util.ArrayList;
public class TestInteface{
public static void main(String []Args){
Edificio polideportivo1 = new Polideportivo("Marbella",2,250,125);
Edificio polideportivo2 = new Polideportivo("Sant Josep",1,200,90);
Edificio polideportivo3 = new Polideportivo("Argentina",4,370,190);
Edificio edificioOficinas1 = new EdificioOficinas(10);
edificioOficinas1.setLargo(29);
Edificio edificioOficinas2 = new EdificioOficinas(420);
ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
listaEdificios.add(polideportivo1);
listaEdificios.add(polideportivo2);
listaEdificios.add(polideportivo3);
listaEdificios.add(edificioOficinas1);
listaEdificios.add(edificioOficinas2);
Iterator<Edificio> it = listaEdificios.iterator();
while(it.hasNext()){
System.out.println(it.next().toString());
}
}
}
no me reconoce el método. Será porque el método main es "static" y por eso?
Gracias.