• Sábado 9 de Noviembre de 2024, 03:35

Autor Tema:  Error Con Polimorfismo  (Leído 1575 veces)

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Error Con Polimorfismo
« en: Sábado 12 de Mayo de 2007, 20:13 »
0
Hola he creado un programita, con herencia, tengo que usar polimorfismo, osea crear objetos de la clase padre e instanciarlos con las clases hijas, pero resulta que al ultilizar los metodos de las clases hijas no compila, que puede pasar? Aqui os dejo el codigo a ver si le echais un vistazo. Gracias

Código: Text
  1. import java.io.*;
  2. class Vehiculo{
  3.   protected String fabricante;
  4.   protected String modelo;
  5.   protected int año;
  6.   protected double kilometraje;
  7.  
  8.   public Vehiculo(String fabricante, String modelo, int año, double kilometraje){
  9.     this.fabricante=fabricante;
  10.     this.modelo=modelo;
  11.     this.año=año;
  12.     this.kilometraje=kilometraje;
  13.   }
  14.  
  15.   public String getFabricante(){
  16.     return fabricante;
  17.   }
  18.  
  19.   public String getModelo(){
  20.     return modelo;
  21.   }
  22.  
  23.   public int getAño(){
  24.     return año;
  25.   }
  26.  
  27.   public double getKilometraje(){
  28.     return kilometraje;
  29.   }
  30.  
  31. }
  32.  
  33. interface CapacidadLimite{
  34.   int an=5;
  35.   int av=7;
  36.   int c=3;
  37.  
  38. }
  39.  
  40. class Motocicleta extends Vehiculo{
  41.  
  42.   private String uso;
  43.  
  44.   public Motocicleta(String fabricante, String modelo, int año, double kilometraje, String uso){
  45.     super(fabricante, modelo, año, kilometraje);
  46.     this.uso=uso;
  47.   }
  48.  
  49.   public String getUso(){
  50.     return uso;
  51.   }
  52.  
  53. }
  54.  
  55. class Automovil extends Vehiculo implements CapacidadLimite{
  56.  
  57.  
  58.   private String estilo;
  59.    public Automovil(String fabricante, String modelo, int año, double kilometraje, String estilo){
  60.     super(fabricante, modelo, año, kilometraje);
  61.     this.estilo=estilo;
  62.   }
  63.  
  64.   public String getEstilo(){
  65.     return estilo;
  66.   }
  67.  
  68.   public void AN(){
  69.     System.out.println("La capacidad limite para un automovil normal es "+an+" pasajeros");
  70.   }
  71.  
  72.   public void AV(){
  73.     System.out.println("La capacidad limite para un automovil vans es "+av+" pasajeros");
  74.   }
  75.  
  76.  
  77. }
  78.  
  79. class Camion extends Vehiculo implements CapacidadLimite{
  80.  
  81.   private int remolques;
  82.   private boolean pasajeros;
  83.  
  84.   public Camion(String fabricante, String modelo, int año, double kilometraje, int remolques, boolean pasajeros){
  85.     super(fabricante, modelo, año, kilometraje);
  86.     this.remolques=remolques;
  87.     this.pasajeros=pasajeros;
  88.   }
  89.  
  90.  
  91.   public int getRemolques(){
  92.     return remolques;
  93.   }
  94.  
  95.   public boolean getPasajeros(){
  96.     return pasajeros;
  97.   }
  98.  
  99.   public void seguridad(){
  100.     if(pasajeros==true){
  101.       System.out.println("La seguridad de este camion es baja.");
  102.     }
  103.     else{
  104.       System.out.println("La seguridad de este camion es alta.");
  105.     }
  106.   }
  107.  
  108.   public void CL(){
  109.     System.out.println("La capacidad limite del camion es "+c+" pasajeros");
  110.   }
  111.    
  112. }
  113.  
  114.  
  115. class Menu{
  116.  
  117.   public static void main(String[]args)throws IOException{
  118.     BufferedReader leer=new BufferedReader(new InputStreamReader (System.in));
  119.     Vehiculo Objeto=null;
  120.     //Vehiculo Objeto;
  121.     //Objeto = V1;
  122.    
  123.     System.out.println("Introduce 'm' para motocicleta, 'a' para automovil, 'c' para camion: ");
  124.     char c;
  125.     c=leer.readLine().charAt(0);
  126.  
  127.     switch(c){
  128.  
  129.       case 'm':
  130.         Objeto=new Motocicleta("Derbi","Varial", 2001, 5000, "Utilizada en urbano");
  131.         System.out.println("Fabricante: "+Objeto.getFabricante());
  132.         System.out.println("Modelo: "+Objeto.getModelo());
  133.         System.out.println("Año de fabricacion: "+Objeto.getAño());
  134.         System.out.println("Kilometraje: "+Objeto.getKilometraje());
  135.         System.out.println("Uso: "+Objeto.getUso());
  136.        
  137.         break;
  138.  
  139.       case 'a':
  140.         Objeto=new Automovil("BMV", "V12", 2000, 50000,"Deportivo");
  141.         System.out.println("Fabricante: "+Objeto.getFabricante());
  142.         System.out.println("Modelo: "+Objeto.getModelo());
  143.         System.out.println("Año de fabricacion: "+Objeto.getAño());
  144.         System.out.println("Kilometraje: "+Objeto.getKilometraje());
  145.         System.out.println("Estilo: "+Objeto.getEstilo());
  146.  
  147.         System.out.println("Si el coche es vans introduce el caracter 's' de lo contrario introduce 'n': ");
  148.         char a= leer.readLine().charAt(0);
  149.         if(a=='s'){
  150.           Objeto.AV();
  151.         }
  152.         else{
  153.           Objeto.AN();
  154.         }
  155.         break;
  156.  
  157.       case 'c':
  158.         int n;
  159.         boolean b=true;
  160.         System.out.println("Indique los pasajeros que van a viajar en el camion: ");
  161.         n =Integer.parseInt(leer.readLine());
  162.         if(a<3){
  163.           b=false;
  164.         }
  165.         Objeto=new Camion("Mercedes", "r59", 1991, 100000, 2,b);
  166.         System.out.println("Fabricante: "+Objeto.getFabricante());
  167.         System.out.println("Modelo: "+Objeto.getModelo());
  168.         System.out.println("Año de fabricacion: "+Objeto.getAño());
  169.         System.out.println("Kilometraje: "+Objeto.getKilometraje());
  170.         System.out.println("Nº de remolques: "+Objeto.getRemolques());
  171.         Objeto.seguridad();
  172.         Objeto.CL();
  173.        
  174.         break;
  175.      
  176.     }
  177.   }
  178.  
  179. }
  180.  

Salu2



JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Error Con Polimorfismo
« Respuesta #1 en: Domingo 13 de Mayo de 2007, 15:17 »
0
hace falta entonces ver que lo que tienes mal, lo cual en el código que pusiste no se porque no esta completo ni muestra los casos que dices.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Error Con Polimorfismo
« Respuesta #2 en: Domingo 13 de Mayo de 2007, 18:56 »
0
Cita de: "JuanK"
hace falta entonces ver que lo que tienes mal, lo cual en el código que pusiste no se porque no esta completo ni muestra los casos que dices.
El codigo está completo, no se porque dices que no lo está. Los casos que digo, son por ejemplo que creo objetos de la clase vehiculo y los instancio con los de las clases hijas, motocicleta, camion, etc. Y luego uso los metodos de las clases hijas, entonces es donde viene el error.

Salu2



hano

  • Miembro activo
  • **
  • Mensajes: 87
    • Ver Perfil
Re: Error Con Polimorfismo
« Respuesta #3 en: Lunes 14 de Mayo de 2007, 09:42 »
0
Hola:

Estás declarando Objeto como vehículo.

Código: Text
  1. Vehiculo Objeto=null;
  2.  

Luego con esa definición, por ejemplo, el método getRemolques() no lo reconocería. El polimormismo se debería utilizar para diferenciar comportamientos de objetos que heredan de la misma clase, definiendo algún método abstracto que todos implementen.

Si quieres usar polimorfismo, en este caso podrías definir un método abstracto en Vehículo.

Código: Text
  1. public abstract class Vehiculo {
  2.   public abstract void output();
  3. }
  4.  

Ese método generaría la salida que quieres, y el case quedaría como:

Código: Text
  1. switch(c){
  2.  
  3.       case 'm':
  4.         Objeto=new Motocicleta("Derbi","Varial", 2001, 5000, "Utilizada en urbano");
  5.       case 'a':
  6.         Objeto=new Automovil("BMV", "V12", 2000, 50000,"Deportivo");
  7. ..........
  8.  
  9.  
  10.  

Después no tendrías más que llamar al método común.

Código: Text
  1. Objeto.output();
  2.  

Luis Javier López Arredondo
                                                                                               
Para programadores
http]
[url=https://hardprogrammer.blogspot.com]https]

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Error Con Polimorfismo
« Respuesta #4 en: Lunes 14 de Mayo de 2007, 23:06 »
0
Gracias, pero he hecho unas modificaciones y el programa ya funciona. Pero tengo algunas preguntillas. Entonces usando el polimorfismo, no podemos usar metodos de las clases hijas que no esten en la clase padre?

Y otra cosilla mas, he creado un método consultar, al cual le paso un int, pero en el metodo consultar de la clase motocicleta no necesito pasarle ningun parametro, asique le paso 0. Esto es semanticamente correcto?, si no como se podría solucionar??.

Pongo aquí el código modificado:

Código: Text
  1. import java.io.*;
  2. class Vehiculo{
  3.   protected String fabricante;
  4.   protected String modelo;
  5.   protected int año;
  6.   protected double kilometraje;
  7.  
  8.   public Vehiculo(String fabricante, String modelo, int año, double kilometraje){
  9.     this.fabricante=fabricante;
  10.     this.modelo=modelo;
  11.     this.año=año;
  12.     this.kilometraje=kilometraje;
  13.   }
  14.  
  15.   public String getFabricante(){
  16.     return fabricante;
  17.   }
  18.  
  19.   public String getModelo(){
  20.     return modelo;
  21.   }
  22.  
  23.   public int getAño(){
  24.     return año;
  25.   }
  26.  
  27.   public double getKilometraje(){
  28.     return kilometraje;
  29.   }
  30.   public void consultar(int t){
  31.   }
  32.  
  33. }
  34.  
  35. interface CapacidadLimite{
  36.   int an=5;
  37.   int av=7;
  38.   int c=3;
  39.  
  40. }
  41.  
  42. class Motocicleta extends Vehiculo{
  43.  
  44.   private String uso;
  45.  
  46.   public Motocicleta(String fabricante, String modelo, int año, double kilometraje, String uso){
  47.     super(fabricante, modelo, año, kilometraje);
  48.     this.uso=uso;
  49.   }
  50.  
  51.   public String getUso(){
  52.     return uso;
  53.   }
  54.   public void consultar(int t ){
  55.     System.out.println("Uso: "+uso);
  56.   }
  57.  
  58. }
  59.  
  60. class Automovil extends Vehiculo implements CapacidadLimite{
  61.  
  62.   private String estilo;
  63.    public Automovil(String fabricante, String modelo, int año, double kilometraje, String estilo){
  64.     super(fabricante, modelo, año, kilometraje);
  65.     this.estilo=estilo;
  66.   }
  67.  
  68.   public String getEstilo(){
  69.     return estilo;
  70.   }
  71.  
  72.   public void consultar(int t){
  73.    
  74.    
  75.     System.out.println("Estilo: "+estilo);
  76.    
  77.    
  78.     if(t==1){
  79.       System.out.println("La capacidad limite para un automovil normal es "+an+" pasajeros");
  80.     }
  81.     else{
  82.       System.out.println("La capacidad limite para un automovil vans es "+av+" pasajeros");
  83.     }
  84.   }
  85.    
  86.    
  87.  
  88.  
  89. }
  90.  
  91. class Camion extends Vehiculo implements CapacidadLimite{
  92.  
  93.   private int remolques;
  94.  
  95.   public Camion(String fabricante, String modelo, int año, double kilometraje, int remolques){
  96.     super(fabricante, modelo, año, kilometraje);
  97.     this.remolques=remolques;
  98.    
  99.   }
  100.  
  101.  
  102.   public int getRemolques(){
  103.     return remolques;
  104.   }
  105.  
  106.  
  107.   public void consultar(int t){
  108.     System.out.println("Remolques: "+remolques);
  109.     System.out.println("La capacidad limite del camion es "+c+" pasajeros");
  110.  
  111.     if(t>3){
  112.       System.out.println("La seguridad de este camion es baja.");
  113.     }
  114.     else{
  115.       System.out.println("La seguridad de este camion es alta.");
  116.     }
  117.   }
  118.    
  119.    
  120. }
  121.  
  122.  
  123. class Menu{
  124.  
  125.   public static void main(String[]args)throws IOException{
  126.     BufferedReader leer=new BufferedReader(new InputStreamReader (System.in));
  127.     Vehiculo Objeto=null;
  128.    
  129.     System.out.println("Introduce 'm' para motocicleta, 'a' para automovil, 'c' para camion: ");
  130.     char c;
  131.     c=leer.readLine().charAt(0);
  132.     int n=0;
  133.  
  134.     switch(c){
  135.  
  136.       case 'm':
  137.         Objeto=new Motocicleta("Derbi","Varial", 2001, 5000, "Utilizada en urbano");
  138.         Objeto.consultar(0);
  139.        
  140.         break;
  141.  
  142.       case 'a':
  143.         System.out.println("Si el automovil es vans introduce 0 y si es normal introduce 1: ");
  144.         n=Integer.parseInt(leer.readLine());
  145.         Objeto=new Automovil("BMV", "V12", 2000, 50000,"Deportivo");
  146.         Objeto.consultar(n);
  147.  
  148.        
  149.         break;
  150.  
  151.       case 'c':
  152.         System.out.println("Introduce el numero de pasajeros que van a viajar en el camion: ");
  153.         n=Integer.parseInt(leer.readLine());
  154.         Objeto=new Camion("Mercedes", "r59", 1991, 100000, 2);
  155.         Objeto.consultar(n);
  156.        
  157.         break;
  158.      
  159.     }
  160.     System.out.println("Fabricante: "+Objeto.getFabricante());
  161.     System.out.println("Modelo: "+Objeto.getModelo());
  162.     System.out.println("Año de fabricacion: "+Objeto.getAño());
  163.     System.out.println("Kilometraje: "+Objeto.getKilometraje());
  164.   }
  165.  
  166. }
  167.  

Salu2