¿Cuál es la necesidad de usar Upcasting en Java?

He revisado la mayoría de los documentos en la red, pero todavía no puedo entender por qué tenemos que usar la transmisión.

class Animal 
{ 
    public void callme()
    {
        System.out.println("In callme of Animal");
    }
}

class Dog extends Animal 
{ 
    public void callme()
    {
        System.out.println("In callme of Dog");
    }

    public void callme2()
    {
        System.out.println("In callme2 of Dog");
    }
}

public class UseAnimlas 
{
    public static void main (String [] args) 
    {
        Dog d = new Dog();      
        Animal a = (Animal)d;
        d.callme();
        a.callme();
        ((Dog) a).callme2();
    }
}

Puede considerar este ejemplo para la transmisión. ¿De qué sirve hacer upcasting aquí? Ambosd ya dando el mismo resultado!

Respuestas a la pregunta(8)

Su respuesta a la pregunta