Java: Operador instanceof o cómo saber si una instancia pertenece a una clase


El operador instanceof sirve para conocer si un objeto es de un tipo determinado. Por tipo, nos referimos a clase o interfaz (interface), es decir, si el objeto pasaría el test “ES UN” para esa clase o ese interfaz, especificado a la derecha del operador.

Por ejemplo, imaginemos que tenemos las siguientes clases:

Nuestro ejemplo, pasaría el test “ES UN”, como es dicho antes, porque “coche1 ES UN vehiculo”, pero NO al revés, es decir, NO puede haber un vehiculo1 que sea un coche, esto nunca se daría. Esto es porque Coches es una sublcase de Vehiculos.

Hay que recordar que sólo puede usarse con variables que contengan la referencia a un objeto, es decir, variables que contengan un conjunto de bytes que representen la dirección en memoria en la que está almacenado el objeto. Una variable de referencia normal.

Veamos otro ejemplo:

Las siguientes sentencias devolverían todas “true“:

Como sabemos, todos los objetos derivan de la clase Object. Un buen ejemplo sería hacer instanceof de una instancia de cualquier clase. El resultado siempre será “true“.

NOTA: No podemos usar instanceof para tratar de comprobar dos clases de diferentes jerarquías. Por ejemplo, NO podemos hacer la comparación con un objeto hijo de la clase Math con un hijo de la clase String. Esto provocaría un error de compilación.