Un castin no es otra cosa mas que pasar un tipo de dato a otro, es decir cambio de formatos, todos los tipos de datos se pueden convertir a String y la mayoria tiene el metodo toString() que hace convertir ese tipoo de dato a un String, para los demas hay casos especiales y mas cuando son numeros
de String a Integer
Integer.parseInt(cadena);
lanza una NumberFormatException
de Integer a String hay varias formas
String cadena = numero.toString();
cadena = (String) numero;
cadena = numero + "";
como veras la ultima es una pequeña trampa
hay casos en los que debes usar el metodo Constructor para realizar el casting como en el caso del Double
de String a Double
double numeroDoble = new Double(Cadena);
y tambien lanza un NumberFormatException
pero en general cuando tienes una clase, lo mas comun es que encierres el tipo de dato entre parentesis seguido del valor a convertir por ejemplo, tengo una clase que se llama Gato y tengo una clase equivalente que se llama Minino, suponiendo que las clases sean compatibles el casting seria
Minino gatito = new Minino();
Gato gatote = (Gato) gatito;
y lo que estamos haciendo es convertir la clase Minino a Gato
el polimorfismo no es otra cosa que sobreescribir un metodo ya establecido por una clase abstracta
recuerda que la abstraccion quiere decir que te diran lo que hacer pero no el como lo vas a hacer, a ese tipo de metodos se les denomina metodos sin cuerpo, por ejemplo
abstract void imprimeHola();
te das cuenta que no tiene cuerpo el metodo???, como es abstracto deberias definirlo en la clase que la heredes, por ejemplo puedes poner:
void imprimeHola(){
System.out.println("Hola como estas??");
}
y para otra clase poner
void imprimeHola(){
System.out.println("Hola, Que tranza??");
}
el polimorfismo mediante la abstraccion es como una guia de los metodos que debes de ponerle a una clase que le heredes la clase polimorfa