La clase Grob tiene subclases: Box, Text, Ellipse.
Grob go= box;
// Ellipse eli= new Ellipse(Color.red, Color.green, 20, 20, 30, 10);
// anim.push(eli);
// mover(eli, 120, 100, 80);
// Text text= new Text("Texto", Color.black, 10, 10);
// anim.push(text);
Definiciones:
Tipo estático de una variable: el tipo declarado para esa variable.
Ej: el tipo estático de go es Grob.Tipo dinámico de una variable: el tipo del objeto referenciado por esa variable en un instante de la ejecución.
Ej: el tipo dinámico de go es Box.
Experimento 3: Cambie el tipo de la variable box a Object. Intente recompilar.
Los strings y los arreglos son objetos en Java.Object o1= new int[10]; Object o2= "Hola";
La variable go es de tipo Grob que tiene mayor rango que la variable box (de tipo Box).Grob go= new Box(...); ... Box box= go; // ¡Error en compilación!
Box < Grob < ObjectString < Object
int[] < Object
Es posible asignar un variable a otra variable de menor rango utilizando un cast.Box box= (Box)go; // Ok String s= (String)o; // Ok
Object o= new Box(...); // Ok
...
String s= (String)o; // Ok en compilación
// ClassCastException en ejecución
Java verifica los casts en ejecución.Dada v una variable de un tipo no primitivo:
Object o= ...;
...
if (o instanceof String) {
String s= (String) o;
...
}
else if (o instanceof Grob) {
Grob go= (Grob) o;
...
}
Con instanceof se puede determinar si un objeto pertenece a una
clase.
Object o= new Box(...);
...
if (o instanceof String) {
String s= (String) o;
...
}
else if (o instanceof Grob) { // ¡Verdadero!
Grob go= (Grob) o;
...
}
Todos los objetos de la clase Box también pertenecen a Grob.Todos los objetos pertenecen a Object.