Provillus Norge

El operador instanceof sirve para consultar si un objecto es una instancia de una clase determinada, o de su padre. Por ejemplo, si tenemos la clase Punto :import java.lang.Math;public class Punto {     protected int x, y;     public Punto ( int x, int y ) {         this.x = x;         this.y = y;     }     // Devuelve la distancia al eje de coordenadas     public float distancia() {          return Math.sqrt(Math.pow(x,2.0)+Math.pow(y,2.0));     }}Y luego la clase Punto3D, que hereda a Punto y extiende sus atributos, a parte de sobreescribir el método distancia :import java.lang.Math;public class Punto3D extends Punto {     private int z;     public Punto3D ( int x, int y, int z ) {         super(x,y);         this.z = z;     }     // Devuelve la distancia al eje de coordenadas     public float distancia() {          return Math.sqrt(Math.pow(x,2.0)+Math.pow(y,2.0)+Math.pow(z,2.0));     }}Como vemos, sobreescribimos el método distancia() en Punto3D para que devuelva la distancia al eje de coordenadas de provillus norge una posición en el espacio tridimensional. Si tenemos que escribir algún método general, que pueda tratar tanto con Puntos como con Puntos3D, posiblemente deberemos hacer algún casting de objetos, y para saber con que clase instanciada estamos tratando deberemos usar el operador instanceof.public class Main {     public Main() {     }     public static boolean is3D(Punto p) {         return (p instanceof Punto3D);     }     public static void main(String[] args) {         Punto p2 = new Punto(0,0);         Punto p3 = new Punto3D(0,0,10);         System.out.println(is3D(p2));     }}Como vemos, esto devuelve un false, puesto que p2 no es una instancia de Punto3D. Obviamente, una llamada a is3D con p3 como parámetro si que devolvería un valor verdadero! Pero, y si hacemos p3 instanceof Punto, que devolvera? En este caso, un true, puesto que todo objeto también es instancia de su padre.Labels: operadores