Diario de un Aprendiz de Java

Friday, October 19, 2007

Operador instanceof

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 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:

Sunday, October 14, 2007

Punteros de java

Saturday, October 06, 2007

He vuelto!

Que nostalgia! Hace más de dos años que no escribía en este blog. Durante este tiempo mi vida a dado giros importantes; dejé Java y la programación orientada a objetos de lado, acabé el bachillerato y llegué a la universidad. Exactamente a la UIB, dónde estoy cursando segundo de Ingeniería Técnica en Informática de Sistemas.

Vuelvo para quedarme. Me ha dado el empujón necesario para retomar este blog la asignatura de Tecnología de la Programación, dónde nos enseñan algo programación orientada a objetos, complejidad algoritmica y demás, con Java como envoltorio.

Contaré mis aventuras y desventuras con Java y la programación orientada objetos en general, espero ser útil para alguien y que escribir aquí me ayude también a mi. Saludos!

Labels: