Java - Problema con herencia, clase abstracta y acceso a métodos.

 
Vista:
Imágen de perfil de Javier
Val: 115
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con herencia, clase abstracta y acceso a métodos.

Publicado por Javier (54 intervenciones) el 17/04/2017 11:43:06
Hola, estoy teniendo un problema en una parte de un programa que estoy realizando. El problema que tengo es que tengo una clase abstracta con métodos definidos y métodos abstractos. Luego tengo las clases que derivan de esta clase abstracta que implementan sus métodos propios.
Bien, el problema es que en mi programa principal guardo en un ArrayList<tipoClaseAbstracta> instancias de las clases que heredan de la clase abstracta y luego no puedo recuperar un elemento del ArrayList y, una vez recuperado poder acceder a los métodos propios que tiene definido la clase a la que pertenezca ese objeto.
Por ejemplo: supongamos que tengo esta clase abstracta:
1
2
3
4
5
6
7
8
9
10
11
public abstract class Vehiculo {
    String marca;
    String modelo;
 
    Vehiculo(String marca, String modelo){
        this.marca = marca;
        this.modelo = modelo;
    }
 
    abstract void arrancarVehiculo();
}

Luego tengo esta clase que hereda de la clase abstracta Vehiculo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Coche extends Vehiculo {
 
    public Coche(String marca, String modelo) {
        super(marca, modelo);
    }
 
    @Override
    void arrancarVehiculo() {
        //arrancar vehículo
    }
 
    //En esta clase defino un método 
    void metodoParticularCoche(){
        System.out.println("Este método solo está definido en la clase Coche");
    }
 
}

Y también tengo otra clase que hereda de la clase abstracta Vehiculo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Camion extends Vehiculo {
 
    public Camion(String marca, String modelo) {
        super(marca, modelo);
    }
 
    @Override
    void arrancarVehiculo() {
        //arranca el vehículo
    }
 
    //Creamos otro método particular para esta clase
    void metodoParticularCamion(){
        System.out.println("Este es un método particular de la clase camión");
    }
 
}

Ahora en mi clase principal es donde introduzco objetos de las clases Coche y Camion y, al querer recuperar un elemento del ArrayList quiero poder acceder a su método particular pero no consigo cómo hacerlo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.ArrayList;
 
 
 
public class Programa {
    public static void main(String[] args) {
        ArrayList<Vehiculo> lista = new ArrayList<Vehiculo>();
        //Por ejemplo añado un objeto Coche
        lista.add(new Coche("Seat", "León"));
 
        //Ahora al ser un objeto Coche quiero poder acceder al método
        //de su clase que era metodoParticularCoche().
 
        //lista.get(0). Haciendo esto sólo puedo acceder a los métodos de la clase Vehiculo
        //pero no se cómo poder acceder a su método particular
    }
}

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 349
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con herencia, clase abstracta y acceso a métodos.

Publicado por Andrés (340 intervenciones) el 17/04/2017 11:59:43
Si lo que se desea hacer es accesar a un método particular, se tiene que usar el operador instanceof y castear el objeto.

Del ejemplo que colocas:

1
2
3
4
5
6
7
8
9
10
11
12
13
Camion t =null;
Coche c = null;
 
Vehiculo v = listados.get(0);
 
if( v instanceof Camion) {
    t=(Camion)v;
...
}
else if( v instanceof Coche) {
    c=(Coche)v;
...
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Javier
Val: 115
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con herencia, clase abstracta y acceso a métodos.

Publicado por Javier (54 intervenciones) el 17/04/2017 12:53:30
Muchas gracias Andrés, me sirvió. La verdad es que me fastidia mucho tener estos fallos todavía, pero bueno todo es practicar, practicar y practicar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar