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
Java verifica los casts en ejecución.Object o= new Box(...); // Ok ... String s= (String)o; // Ok en compilación // ClassCastException en ejecución
Dada v una variable de un tipo no primitivo:
Con instanceof se puede determinar si un objeto pertenece a una clase.Object o= ...; ... if (o instanceof String) { String s= (String) o; ... } else if (o instanceof Grob) { Grob go= (Grob) o; ... }
Todos los objetos de la clase Box también pertenecen a Grob.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 pertenecen a Object.