Typ eines Objektes ermitteln

Mit dem Operator instanceof kann der Typ eines Objektes ermittelt werden. Er liefert einen boolschen Wert, abhängig davon, ob das Objekt vom geprüften Typ ist oder nicht.

Das Beispiel weist insgesamt vier Klassen auf. Von diesen enthält InstanceofClass die main-Methode und wird ausgeführt. Die Klasse Person dient als Superklasse, von der Vater und von dieser wiederum Kind abgeleitet wurden.

In main() wird zunächst ein Objekt vom Typ Kind gebildet und dies in der Variablen kind gespeichert. Dann wird eine Variable vom Typ Person erzeugt, diese aber mit null initialisiert.
Darauf folgen einige Objekt-Überprügungen mit instanceof und entsprechende Ausgaben.

public class InstanceofClass {

    public static void main(String[] args) {
        Kind kind = new Kind();
        Person person = null;
        System.out.println("kind ist vom Typ Kind: " + (kind instanceof Kind));
        System.out.println("person ist vom Typ Person: " + (person instanceof Person));
        System.out.println("kind ist vom Typ Vater: " + (kind instanceof Vater));
        System.out.println("kind ist vom Typ Person: " + (kind instanceof Person));
        System.out.println("person ist vom Typ Kind: " + (person instanceof Kind));
    }
}

class Person {
}

class Vater extends Person {
}

class Kind extends Vater {
}
				

Die Ausgabe sieht wie folgt aus:

kind ist vom Typ Kind: true
person ist vom Typ Person: false
kind ist vom Typ Vater: true
kind ist vom Typ Person: true
person ist vom Typ Kind: false

Der Operator erwartet zwei Operanden: Links steht das zu überprüfende Objekt rechts der Bezeichner der Klasse, auf die hin das Objekt geprüft werden soll.
Das Ergebnis der ersten Zeile verwundert nicht: Selbstverständlich ist das Objekt kind auch vom Typ Kind, da es aus diesem gebildet wurde. In der zweiten Zeile wird überprüft, ob auch das Objekt person vom Typ Person ist. Hier wird jedoch false ausgegeben, da das Objekt mit null initialisiert wurde, das Objekt selbst also eigentlich nicht existiert.
Die dritte Zeile erzeugt die Ausgabe true, da das Objekt kind vom Typ Kind von Vater abgeleitet wurde und somit die Eigenschaftsmenge dieser Klasse mit beinhaltet.
Auch die vierte Zeile erzeugt true, da kind durch die Ableitung von Vater auch eine Spezifizierung von Person ist. Wie die nächste Zeile zeigt ist dies aus zweierlei Gründen jedoch umgekehrt nicht der Fall:

  1. person wurde mit null initialisiert
  2. person ist keine Ableitung von Kind. Zwar ist jedes kind eine Person, aber nicht jede person, ist auch ein Kind, sondern könnte z.B. auch ein Vater sein.