Hola Jarper
Tu ejercicio está bien.
Has creado las interface con sus métodos abstractos que luego has definido en las clases que las implementan. Bien.
Tal como dices has creado el método mostrarAtributos(), para eso, para mostrarlos.
Está bien hecho, pero podías haber hecho los mismo sobreescribiendo el método toString(), el estandard de Java para devolver eso, información sobre la clase.
Si hubieras hecho eso, sobreescribir el método toString(). Podrías cambiar la última línea de tu main:
System.out.println(it.next().mostrarAtributos());
por esta:
System.out.println(it.next());
No he tenido ocasión de decírtelo antes. A los métodos sobreescritos se les antepone una línea con la etiqueta
@Override.
La ausencia de esta etiqueta no da error. Su función, es:
Al que lee la clase, le informa que este método existe en la clase superior o en alguna de las anteriores y que aquí se sobreescribe realizando una función diferente
Y a quien escribe el código le dará error si después de esta etiqueta no sobreescribe un método de las clases superiores. Esta alarma le permitirá no crear código erróneo.
También, el hecho de usar interfaces nos permitía cambiar las siguientes declaraciones:
Oficinas of1 = new Oficinas(4,500);
Oficinas of2 = new Oficinas(2,300);
Oficinas of3 = new Oficinas(6,1000);
Polideportivo pd1 = new Polideportivo(1,1000,"Polideportivo BCN");
Polideportivo pd2 = new Polideportivo(1,2000,"Polideportivo MAD");
por estas:
Edificio of1 = new Oficinas(4,500);
Edificio of2 = new Oficinas(2,300);
Edificio of3 = new Oficinas(6,1000);
Edificio pd1 = new Polideportivo(1,1000,"Polideportivo BCN");
Edificio pd2 = new Polideportivo(1,2000,"Polideportivo MAD");
Y por último un detalle que no es importante, pero quiero comentarlo.
Dentro de una clase para conocer el valor de un atributo de nombre precio podemos hacerlo de dos formas:
System.out.println("Precio: =" + precio);
o
System.out.println("Precio: =" + getPrecio());
Y para cambiar el atributo:
precio = 25;
o
setPrecio(25);
Puedes escoger cualquiera de las dos formas, invocar al atributo directamente o por medio de su setter o su getter.
Hacer esto desde clases ajenas, solo puede hacerse usando los setters y getters.
En fin, eso es todo. Saludos