Autor Tema: Ejercicio interfaces java simular implementación herencia múltiple CU00697B  (Leído 4678 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
otro mas,

Citar
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?

Clase interface InstalacionDeportiva
Código: [Seleccionar]
public interface InstalacionDeportiva{
   int getTipoDeInstalacion();
}

Clase interface Edificio
Código: [Seleccionar]
public interface Edificio{
    double getSuperficieEdificio();
}

Clase Polideportivo
Código: [Seleccionar]
public class Polideportivo implements InstalacionDeportiva, Edificio{
      private String nombre;
      private int tipoDeInstalacion;
      private double superficie;     
      public Polideportivo(){
          nombre = "";
          tipoDeInstalacion = 0;
          superficie = 0;
      }
      public Polideportivo(String nombre, int tipoDeInstalacion, double superficie){
          this.nombre = nombre;
          this.tipoDeInstalacion = tipoDeInstalacion;
          this.superficie = superficie;
      }
      public void setNombre(String nombre){ this.nombre = nombre; }
      public void setTipoDeInstalacion(int tipoDeInstalacion){ this.tipoDeInstalacion = tipoDeInstalacion; }
      public void setSuperficie(double superficie){ this.superficie = superficie; }
      public String getNombre(){ return nombre; }
      public int getTipoDeInstalacion(){ return tipoDeInstalacion; }
      public double getSuperficieEdificio(){ return superficie; }
      public String toString(){
          return "Edificio tipo Polideportivo.\nNombre del polideportivo: " + nombre + "\nTipo de instalación: "
              + tipoDeInstalacion + "\nSuperficie: " + superficie + "m2\n-------------------";
      }
}

Clase EdificioDeOficinas
Código: [Seleccionar]
public class EdificioDeOficinas implements Edificio{
    private int numOficinas;
    private double superficie;
    public EdificioDeOficinas(){
        numOficinas = 0;
        superficie = 0;
    }
    public EdificioDeOficinas(int numOficinas, double superficie){
        this.numOficinas = numOficinas;
         this.superficie = superficie;
    }
    public void setNumOficinas(int numOficinas){ this.numOficinas = numOficinas; }
    public void setSuperficie(double superficie){ this.superficie = superficie; }
    public int getNumOficinas(){ return numOficinas; }
    public double getSuperficieEdificio(){ return superficie; }
    public String toString(){
        Integer valorNumOficinas = numOficinas;
        Double valorSuperficie = superficie;
        return "Edificio tipo Edificio de Oficinas.\nNumero de oficinas: " + numOficinas + "\nSuperficie: "
            + superficie + "m2\n-------------------";
    }
}

Clase TestInterface2
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;
public class TestInterface2{
    public static void main (String [] Args){
        ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
        listaEdificios.add(new Polideportivo("RHY", 1, 1233.45));
        listaEdificios.add(new Polideportivo("GJKL", 1, 45687.56));
        listaEdificios.add(new Polideportivo("SDW", 1, 78988.56));
        listaEdificios.add(new EdificioDeOficinas(44, 45778.22));
        listaEdificios.add(new EdificioDeOficinas(136, 5889.78));
        Iterator<Edificio> it = listaEdificios.iterator();
        while (it.hasNext()){
            System.out.println(it.next().toString());
        }
    }
}

y respondiendo a la pregunta ¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?
Es en la clase Polideportivo.

por otro lado quería preguntar sobre esta parte del código de la clase TestInterface2.

Código: [Seleccionar]
while (it.hasNext()){
            System.out.println(it.next().toString());
        }

si quito el .toString() sigue imprimiendo lo mismo por consola, ¿a que se debe?
« Última modificación: 27 de Julio 2015, 23:00 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Pedro código revisado y todo bien, la pregunta también bien respondida.

Citar
si quito el .toString() sigue imprimiendo lo mismo por consola, ¿a que se debe?

Esto se debe a mecanismos automáticos incorporados en el compilador de Java. Cuando el compilador se encuentra un código como System.out.println(algo); trata de hacer las siguientes comprobaciones:

- Si algo es un String lo considera correcto y lo ejecuta

- Si algo no es un String trata de buscar su representación en forma de String, para ello automáticamente transforma la expresión en System.out.println(algo.toString()); que es como dentro de la convención de Java algo sería representado en forma de String. Si encuentra el método, ejecuta el método y muestra el String representación de algo.

- Si no logra con éxito nada de lo anterior lanza un error.

Por ello en el caso que comentas obtienes el mismo resultado si incluyes toString() que si no lo incluyes. En el caso de no incluirlo es el compilador Java quien lo hace

Saludos  ;D

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Muchas gracias Alex.

Ahora me quedó todo claro.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".