es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Polimorfismo y casting de objetos en Java

¿Existe alguna posibilidad de que o1 o o2 se puedan convertir a A y el programa se ejecute? ¿Por qué la última instrucción da un error de tiempo de ejecución?

public class A{
    public A(Object object)
    {

    }
    public A(){

    }
    public String toString(){
        return "A";
    }
}

public class Main{
    public static void main(String []args){

        A a4 = new A();
        Object o1 = new Object();
        Object o2 = new A(o1);

        a4 = o1; //Error de compilación
        o2 = o1;
        ((A)o1).toString();//Error de tiempo de ejecución
        a4.toString();
        ((A)o2).toString();//Error de tiempo de ejecución
    }
}

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    No, no hay posibilidad de que o1 u o2 puedan ser convertidos a A y el programa se ejecute. Esto se debe a que o1 es una instancia de Object, no de A. Y aunque o2 es una instancia de A, fue construido con otro Object, por lo que su tipo en tiempo de ejecución sigue siendo Object.

    La última instrucción es un error en tiempo de ejecución porque o1 no puede ser convertido a A. Esto se debe a que o1 nunca fue una instancia de A desde el principio, y tratar de convertirlo a A en tiempo de ejecución resulta en una ClassCastException.

Comments are closed.