Foros del Web » Programación para mayores de 30 ;) » Java »

Problema de Polimorfismo

Estas en el tema de Problema de Polimorfismo en el foro de Java en Foros del Web. Hola a todos, estaba haciendo un programilla en java que me han mandando en la universidad, per ya no se por donde seguir, estoy totalmente ...
  #1 (permalink)  
Antiguo 02/05/2008, 13:16
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 15 años, 11 meses
Puntos: 0
Exclamación Problema de Polimorfismo

Hola a todos, estaba haciendo un programilla en java que me han mandando en la universidad, per ya no se por donde seguir, estoy totalmente bloqueado, se mas o menos lo que tengo mal, pero pff no se solucionarlo, aver si me podeis ayudar.

La estructura del programa es una clase padre (vehiculo) con 3 clases hijas (motocicleta,automovil y camion) y de estas 3 hijas, automovil y camion usan la interfaz capacidadlimite, y todo ello evidentemente "gobernado" por el main

aqui les dejo el codigo del program que me da fallo, ayudenme por favor T.T

Código:
import java.io.*;
class Vehiculo{
  protected String fabricante;
  protected String modelo;
  protected int año;
  protected double kilometraje;
  
  public Vehiculo(String fabricante, String modelo, int año, double kilometraje){
    this.fabricante=fabricante;
    this.modelo=modelo;
    this.año=año;
    this.kilometraje=kilometraje;
  }

  public String getFabricante(){
    return fabricante;
  }

  public String getModelo(){
    return modelo;
  }

  public int getAño(){
    return año;
  }

  public double getKilometraje(){
    return kilometraje;
  }

}

interface CapacidadLimite{
  int an=5;
  int av=7;
  int c=3;

}

class Motocicleta extends Vehiculo{

  private String uso;

  public Motocicleta(String fabricante, String modelo, int año, double kilometraje, String uso){
    super(fabricante, modelo, año, kilometraje);
    this.uso=uso;
  }
  
  public String getUso(){
    return uso;
  }

}

class Automovil extends Vehiculo implements CapacidadLimite{


  private String estilo;
   public Automovil(String fabricante, String modelo, int año, double kilometraje, String estilo){
    super(fabricante, modelo, año, kilometraje);
    this.estilo=estilo;
  }

  public String getEstilo(){
    return estilo;
  }
  
  public void AN(){
    System.out.println("La capacidad limite para un automovil normal es "+an+" pasajeros");
  }

  public void AV(){
    System.out.println("La capacidad limite para un automovil vans es "+av+" pasajeros");
  }


}

class Camion extends Vehiculo implements CapacidadLimite{

  private int remolques;
  private boolean pasajeros;

  public Camion(String fabricante, String modelo, int año, double kilometraje, int remolques, boolean pasajeros){
    super(fabricante, modelo, año, kilometraje);
    this.remolques=remolques;
    this.pasajeros=pasajeros;
  }


  public int getRemolques(){
    return remolques;
  }

  public boolean getPasajeros(){
    return pasajeros;
  }

  public void seguridad(){
    if(pasajeros==true){
      System.out.println("La seguridad de este camion es baja.");
    }
    else{
      System.out.println("La seguridad de este camion es alta.");
    }
  }
  
  public void CL(){
    System.out.println("La capacidad limite del camion es "+c+" pasajeros");
  }
    
}


class Menu{

  public static void main(String[]args)throws IOException{
    BufferedReader leer=new BufferedReader(new InputStreamReader (System.in));
    Vehiculo Objeto=null;
    //Vehiculo Objeto;
    //Objeto = V1;
    
    System.out.println("Introduce 'm' para motocicleta, 'a' para automovil, 'c' para camion: ");
    char c;
    c=leer.readLine().charAt(0);

    switch(c){

      case 'm':
        Objeto=new Motocicleta("Derbi","Varial", 2001, 5000, "Utilizada en urbano");
        System.out.println("Fabricante: "+Objeto.getFabricante());
        System.out.println("Modelo: "+Objeto.getModelo());
        System.out.println("Año de fabricacion: "+Objeto.getAño());
        System.out.println("Kilometraje: "+Objeto.getKilometraje());
        System.out.println("Uso: "+Objeto.getUso());
        
        break;

      case 'a':
        Objeto=new Automovil("BMV", "V12", 2000, 50000,"Deportivo");
        System.out.println("Fabricante: "+Objeto.getFabricante());
        System.out.println("Modelo: "+Objeto.getModelo());
        System.out.println("Año de fabricacion: "+Objeto.getAño());
        System.out.println("Kilometraje: "+Objeto.getKilometraje());
        System.out.println("Estilo: "+Objeto.getEstilo());

        System.out.println("Si el coche es vans introduce el caracter 's' de lo contrario introduce 'n': ");
        char a= leer.readLine().charAt(0);
        if(a=='s'){
          Objeto.AV();
        }
        else{
          Objeto.AN();
        }
        break;

      case 'c':
        int n;
        boolean b=true;
        System.out.println("Indique los pasajeros que van a viajar en el camion: ");
        n =Integer.parseInt(leer.readLine());
        if(a<3){
          b=false;
        }
        Objeto=new Camion("Mercedes", "r59", 1991, 100000, 2,b);
        System.out.println("Fabricante: "+Objeto.getFabricante());
        System.out.println("Modelo: "+Objeto.getModelo());
        System.out.println("Año de fabricacion: "+Objeto.getAño());
        System.out.println("Kilometraje: "+Objeto.getKilometraje());
        System.out.println("Nº de remolques: "+Objeto.getRemolques());
        Objeto.seguridad();
        Objeto.CL();
        
        break;
      
    }
  }
  
}
Gracias de antemano.
  #2 (permalink)  
Antiguo 02/05/2008, 13:53
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 9 meses
Puntos: 10
Re: Problema de Polimorfismo

Estas tratando de acceder a metodos que en la clase Vehiculo no existen.

Es correcto que incializes tipos de clase Vehiculo con sus hijas, sin embargo como estan declaradas como tipo Vehiculo solo puedes acceder a los metodos que la clase Vehiculo posee, se comportaran como la clase que le haces el new, es decir, el getAño, getModelo y getKilometraje los podras acceder sin problemas, peor cualquier clase que no este declarada en ella nop.

Recuerda que estas inicializando con objetos en los que existen, pero su declaracion sigue siendo un Vehiculo, y el Vehiculo no tiene el metodo getUso.
__________________
se despide hasta la proxima
Gonzalo Castillo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:44.