Exception java.lang.classCastException when cast subclass from SuperClass
<p>Im getting the error in the title when I try to use the method <code>getInfoDerivada()</code> from <code>Desguace</code>: </p>

<blockquote>
  <p>Exception in thread "main" java.lang.ClassCastException:
  es.unex.cum.mdp.sesion2.Vehiculo cannot be cast to
  es.unex.cum.mdp.sesion2.Moto  at
  es.unex.cum.mdp.sesion2.Desguace.getInfoDerivada(Desguace.java:93)    at
  es.unex.cum.mdp.sesion2.Main.main(Main.java:21)</p>
</blockquote>

<p>And I don't know how to cast the subclass <code>Moto</code> to use its method <code>getPotencia()</code> from superclass <code>Vehiculo</code>.</p>

<p>Thanks</p>

<pre class="lang-java prettyprint-override"><code>package es.unex.cum.mdp.sesion2;

public class Main {

    public static void main(String[] args) {

        Persona p = new Persona();
        Vehiculo v = new Coche("Renault","Asd",p,1234,"azul");
        Vehiculo v1 = new Moto("a","b",p,2345,25);

        if(v.getClass().equals(Coche.class))
            System.out.println("holi 1.0");

        Desguace d = new Desguace("pepe",2);

        if(d.addVehiculo(v))
            System.out.println("ok");
        if(d.addVehiculo(v1))
            System.out.println("ok");

        String a = d.getInfoDerivada(1);
        String b = v1.toString();
        System.out.println(b);

        System.out.println(a);

    }

}
</code></pre>

<p>Class <strong>Desguace</strong>
</p>

<pre><code>package es.unex.cum.mdp.sesion2;

import java.util.Arrays;

public class Desguace {
    protected String nombre;
    protected Vehiculo [] vehiculos;
    protected Integer cont;


    public Desguace() {
        nombre = "";
        vehiculos = new Vehiculo[0];
        cont = 0;
    }

    public Desguace(String nombre, int cant) {
        this.nombre = nombre;
        vehiculos = new Vehiculo[cant];
        cont = 0;
    }

    public boolean addVehiculo (Vehiculo v){
        for(int i = 0; i &lt; cont; i++)
            if(vehiculos[i].getBastidor() == v.getBastidor())
                return false;
        if(cont&lt;vehiculos.length){
            vehiculos[cont] = new Vehiculo(v);
            cont = cont + 1;
            return true;
        }
        else
            return false;
    }

    public Vehiculo getVehiculoBastidor(Integer bastidor){
        if(bastidor &lt; 0)
            return null;
        for(int i = 0; i &lt; cont; i++){
            if(vehiculos[i].getBastidor()==bastidor)
                return vehiculos[i];
        }
        return null;
    }

    public boolean addPiezaVehiculo(Pieza p, Integer bastidor){
        if(bastidor &lt; 0)
            return false;
        for(int i = 0; i &lt; cont; i++){
            if(vehiculos[i].getBastidor() == bastidor){
                for(int j = 0; j &lt; vehiculos[i].getCont(); j++){
                    if(vehiculos[i].getPiezaV(j).equals(p)){
                        vehiculos[i].getPiezaV(j).setContador(vehiculos[i].getPiezaV(j).getContador() + p.getContador());
                        return true;}
                    else{
                        if(vehiculos[i].getCont() &lt; 3){
                            vehiculos[i].addPiezaV(p);
                            vehiculos[i].setCont(vehiculos[i].getCont()+1);
                        }
                        else
                            return false;
                    }
                }

            }
        }
        return false;
    }

    public Vehiculo mayorStock(){
        int aux = 0;
        if(vehiculos[aux] == null)
            return null;
        for(int i = 1; i &lt; cont; i++){
            if(vehiculos[aux].getCont() &lt; vehiculos[i].getCont())
                aux = i;
        }
        return vehiculos[aux];  
    }

    public String getInfoDerivada(int pos){
        if(pos &lt; 0 || pos &gt;= cont){
            return null;}
        if(vehiculos[pos].getClass() == Coche.class){
            return ((Coche)vehiculos[pos]).getColor();
        }
        if(vehiculos[pos].getClass() == Moto.class){
            return String.valueOf(((Moto)vehiculos[pos]).getPotencia());
        }
        if(vehiculos[pos].getClass() == Camion.class){
            return String.valueOf(((Camion)vehiculos[pos]).getTonelaje());
        }
            return String.valueOf(((Moto)vehiculos[pos]).getPotencia());
    }

    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public Integer getCont() {
        return cont;
    }
    public void setCont(Integer cont) {
        this.cont = cont;
    }
    public Vehiculo[] getVehiculos() {
        return vehiculos;
    }

    @Override
    public String toString() {
        return "Desguace [nombre=" + nombre + "]";
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Desguace other = (Desguace) obj;
        if (cont == null) {
            if (other.cont != null)
                return false;
        } else if (!cont.equals(other.cont))
            return false;
        if (nombre == null) {
            if (other.nombre != null)
                return false;
        } else if (!nombre.equals(other.nombre))
            return false;
        if (!Arrays.equals(vehiculos, other.vehiculos))
            return false;
        return true;
    }



}
</code></pre>

<p>Class <strong>Vehiculo</strong>
</p>

<pre><code>package es.unex.cum.mdp.sesion2;

public class Vehiculo {
    protected String marca;
    protected String modelo;
    protected Persona propietario;
    protected Pieza[] piezas;
    protected Integer bastidor;
    protected Integer cont;

    public Vehiculo() {
        marca = "";
        modelo = "";
        propietario = new Persona();
        bastidor = 0;
        piezas=new Pieza[3];
        for(int i = 0; i &lt; piezas.length; i++)
            piezas[i] = new Pieza();
        cont=0;
    }

    public Vehiculo(String marca, String modelo, Persona p, Integer bastidor) {
        this.marca = marca;
        this.modelo = modelo;
        this.bastidor = bastidor;
        propietario = new Persona(p.getNombre(),p.getDni(),p.getEdad());
        piezas=new Pieza[3];
        for(int i = 0; i &lt; piezas.length; i++)
            piezas[i] = new Pieza();
        cont = 0;
    }

    public Vehiculo(Vehiculo p) {
        this(p.getMarca(),p.getModelo(),p.propietario, p.getBastidor());
    }

    public boolean addPiezaV(Pieza p) {
        for(int i = 0; i &lt; cont; i++){
            if(piezas[i].equals(p))
                piezas[i].setContador(piezas[i].getContador()+p.getContador());
        }
        piezas[cont].setId(p.getId());
        piezas[cont].setNombre(p.getNombre());
        piezas[cont].setContador(p.getContador());
        cont = cont + 1;
        return true;

    }

    public Pieza getPiezaV(int pos) {
        if(pos &gt;= piezas.length || pos &lt; 0)
            return null;
        else
            return piezas[pos];


    }
    //getter y setter

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public Integer getBastidor() {
        return bastidor;
    }

    public void setBastidor(Integer bastidor) {
        this.bastidor = bastidor;
    }

    public Integer getCont(){
        return cont;
    }

    public void setCont(Integer cont){
        this.cont = cont;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Vehiculo other = (Vehiculo) obj;
        if (bastidor == null) {
            if (other.bastidor != null)
                return false;
        } else if (!bastidor.equals(other.bastidor))
            return false;
        if (cont == null) {
            if (other.cont != null)
                return false;
        } else if (!cont.equals(other.cont))
            return false;
        if (marca == null) {
            if (other.marca != null)
                return false;
        } else if (!marca.equals(other.marca))
            return false;
        if (modelo == null) {
            if (other.modelo != null)
                return false;
        } else if (!modelo.equals(other.modelo))
            return false;
        if (propietario == null) {
            if (other.propietario != null)
                return false;
        } else if (!propietario.equals(other.propietario))
            return false;
        return true;
    }

}
</code></pre>

<p>Class <strong>Moto</strong>
</p>

<pre><code>package es.unex.cum.mdp.sesion2;

public class Moto extends Vehiculo {
    protected Integer potencia;

    public Moto(){
        super();
        potencia = 0;
    }

    public Moto(String marca, String modelo, Persona p, Integer bastidor, Integer potencia){
        super(marca,modelo,p,bastidor);
        this.potencia = potencia;
    }

    public Integer getPotencia() {
        return potencia;
    }

    public void setPotencia(Integer potencia) {
        this.potencia = potencia;
    }

    @Override
    public String toString() {
        return "Moto[marca=" + marca + ", modelo=" + modelo + ", bastidor=" + bastidor + ", potencia=" + potencia +"]";
    }

}
</code></pre>