„Hallo Amigo! Du hast bereits den Operator instanceof kennengelernt. Heute werde ich dir sagen, wie und wo er eingesetzt werden kann. instanceof ist ein sehr einfacher und effizienter Operator.“

„Das klingt aber sehr nach Werbung!“

„Er ist wirklich sehr einfach. Er wird so verwendet: ‚Objekt‘ instanceof ‚Klasse‘.“

Er prüft, ob ein Objekt eine Instanz einer bestimmten Klasse ist. Das ist einfacher als es zu erklären. Sieh dir dieses Beispiel an:

Code Beschreibung
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt wird true. Das Objekt, das durch die Variable o referenziert wird, ist eine Instanz der Integer-Klasse.
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt wird false. Das Objekt, das durch die Variable o referenziert wird, ist keine Instanz der Integer-Klasse. Es ist ein String-Objekt.
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof FileInputStream;
isFIS wird true. Das Objekt, das durch die Variable o referenziert wird, ist eine Instanz der FileInputStream-Klasse.

„Ja, das ist sehr einfach.“

„Dieser Operator berücksichtigt auch die Vererbung. Sieh es dir an.“

Code Beschreibung
class Animal
{
}
class Cat extends Animal
{
}
class Tiger extends Cat
{
}
Hier haben wir drei Klassendeklarationen: Animal, Cat und Tiger. Cat erbt von Animal. Und Tiger erbt von Cat.
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat wird true.
isTiger wird true.
isAnimal wird true.
Object o = new Animal();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat wird false.
isTiger wird false.
isAnimal wird true.

Und sogar Interfaces:

Code Beschreibung
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
Lege zwei Klassen an: Cat, TomCat und das Moveable-Schnittstelle
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat wird true.
isMoveable wird true.
isTom wird true.
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat wird true.
isMoveable wird false.
isTom wird false.

Der instanceof-Operator sieht so aus: a instanceof B.

Mit anderen Worten, der instanceof-Operator wird true zurückgeben, wenn:

1) Variable a eine Referenz auf ein Objekt des Typs B speichert

2) Variable a eine Referenz auf ein Objekt speichert, dessen Klasse von B erbt

3) Variable a eine Referenz auf ein Objekt speichert, welches das Interface B implementiert

Andernfalls gibt der instanceof-Operator false zurück.

„Alles klar. Warum ist das also notwendig, Onkel Ritschie?“

„Ellie wird dir heute davon erzählen. Das ist ein wirklich schöner Operator. Davon wirst du heute überzeugt sein."