English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grund教程

Java Flusskontrolle

Java Array

Java objektorientiert (I)

Java objektorientiert (II)

Java objektorientiert (III)

Java Ausnahmebehandlung

Java Liste (List)

Java Queue (Warteschlange)

Java Map Sammlung

Java Set Sammlung

Java Eingabe Ausgabe(I/O)

Java Reader/Writer

Andere Themen von Java

Java instanceof-Schlüsselwort

In diesem教程 werden Sie den instanceof-Operator von Java anhand von Beispielen im Detail kennenlernen.

In Java ist das instanceof-Schlüsselwort ein binärer Operator. Es wird verwendet, um zu überprüfen, ob ein Objekt eine Instanz einer bestimmten Klasse ist.

Der Operator überprüft auch, ob das Objekt eine Instanz einer Klasse ist, die ein Interface implementiert (wird später in diesem教程 besprochen).

Die Syntax von instanceof ist:

result = objectName instanceof className;

 Der linkse运算ator instanceof ist der Objektname, der rechte Operator ist die Klassename. Wenn das Objekt eine Instanz der Klasse ist, dann ist das Ergebnis true; wenn nicht, dann false.

Beispiel1:instanceof

class Main {
    public static void main(String[] args) {
        String name = "w3codebox";
        Integer age = 22;
        System.out.println("Der Name ist ein Beispiel für eine String-Instanz: ")+ (name instanceof String));
        System.out.println("age ist ein Beispiel der Klasse Integer: ");+ (age instanceof Integer));
    }
}

Ausgabe:

Ist name ein Beispiel der Klasse String: true
Ist age ein Beispiel der Klasse Integer: true

Im obigen Beispiel haben wir ein Objekt des Typs String name und ein anderes Objekt des Typs Integer age erstellt. Dann haben wir den Operator instanceof verwendet, um zu überprüfen, ob der Name ein String-Typ ist und ob age ein Integer-Typ ist.

instanceof und Vererbung

Im Falle der Vererbung wird der Operator instanceof verwendet, um zu überprüfen, ob ein Objekt der Unterklasse auch ein Beispiel der Oberklasse ist.

Beispiel2: instanceof in der Vererbung

class Animal {
}
//Die Klasse Dog ist eine Unterklasse der Klasse Animal
class Dog extends Animal {
}
class Main {
    public static void main(String[] args){
        Dog d1 = new Dog();
        //Überprüfen Sie d1Ob es ein Objekt der Klasse Dog ist
        System.out.println("d1Ist d ein Beispiel der Klasse Dog: "+ (d1 instanceof Dog));
       
        //Überprüfen Sie d1Ob es ein Objekt der Klasse Animal ist
        System.out.println("d1Ist d ein Beispiel der Klasse Animal: "+ (d1 instanceof Animal));
    }
}

Ausgabe:

d1Ist d ein Beispiel der Klasse Dog: true
d1Ist d ein Beispiel der Klasse Animal: true

Im obigen Beispiel ist d1sind Beispiele der Klassen Dog und Animal. Daher ist d1 instanceof Dog und d1 instanceof Animal sind alle true.

Klasse Object

In Java sind alle Klassen von der Klasse Object abgeleitet, und das Vererben der Klasse Object erfolgt ohne den Schlüsselwort 'extends'. Diese Vererbung tritt in Java implizit auf.

Beispiel3: Klasse Object

class Animal {
}
class Dog {
}
class Cat {
}
class Main {
    public static void main(String[] args) {
        Dog d1 = new Dog();
        Animal a1 = new Animal();
        Cat c1 = new Cat();
        System.out.println("d1Ist c ein Beispiel der Klasse Object: "+ (d1 instanceof Object));
        System.out.println("a1Ist c ein Beispiel der Klasse Object: "+ (a1 instanceof Object));   
        System.out.println("c1Ist c ein Beispiel der Klasse Object: "+ (c1 instanceof Object));
    }
}

Ausgabe:

d1Ist a ein Beispiel der Klasse Object: true
a1Ist a ein Beispiel der Klasse Object: true
c1Ist a ein Beispiel der Klasse Object: true

Im obigen Beispiel haben wir die Objekte a der Klassen Animal, Dog und Cat erstellt1、d1und c1. Wir haben den Operatoren instanceof verwendet, um diese Objekte a zu überprüfen1, d1, c1Ob es auch ein Objekt der Klasse Object ist. Die Ausgabe ist alle true (wahr).

Dies ist, weil die Klasse Object die Wurklasse in dem Paket java.lang definiert ist. Alle anderen Klassen sind Unterklassen der Klasse Object, die in Java eine Hierarchie bilden.

对象向上转型和向下转型

In Java kann das Objekt der Unterklasse als Objekt der Superklasse betrachtet werden. Dies wird als Typumwandlung nach oben bezeichnet.Einfach gesagt bedeutet dies, dass das Objekt der Unterklasse in ein Objekt der Superklasse umgewandelt wird. Hier kann das Objekt der Superklasse auch ein Interface sein.

Der Java-Compiler führt die Typumwandlung nach oben automatisch aus.

Beispiel4:对象向上转型

class Animal {
    public void displayInfo() {
        System.out.println("Ich bin ein Tier.");
    }
}
class Dog extends Animal {
}
class Main {
    public static void main(String[] args) {
        Dog d1 = new Dog();
        Animal a1 = d1;
        a1.displayInfo();
    }
}

Ausgabe:

Ich bin ein Tier.

Im obigen Beispiel erstellen wir ein Objekt der Klasse Dog d1. Wir verwenden d1Ein Objekt wird verwendet, um ein Objekt der Klasse Animal a zu erstellen1. Dies wird in Java als Typumwandlung nach oben bezeichnet.

Das Codeausführen verläuft ohne Probleme. Das liegt daran, dass die Typumwandlung nach oben automatisch durch den Java-Compiler durchgeführt wird.

Die Typumwandlung nach unten ist das Gegenteil der Typumwandlung nach oben, das bedeutet, dass wir das Objekt der Superklasse in ein Objekt der Unterklasse umwandeln.

Bei der Typumwandlung nach unten wird das Objekt der Superklasse als Objekt der Unterklasse betrachtet. Wir müssen in Java explizit dem Compiler die Typumwandlung nach unten anweisen.

Beispiel5:对象向下转型的问题

class Animal {
}
class Dog extends Animal {
   public void displayInfo() {
       System.out.println("Ich bin ein Hund.");
   }
}
class Main {
   public static void main(String[] args) {
       Animal a1 = new Animal();
       Dog d1 = (Dog)a1; // Typumwandlung nach unten
 
       d1.displayInfo();
   }
}

Beim Ausführen des Programms wird eine Ausnahme vom Typ ClassCastException aufgetreten. Lassen Sie uns sehen, was hier passiert ist.

Hier erstellen wir ein Objekt der Superklasse Animal a1. Dann versuchen wir, a1Das Objekt wird in ein Objekt der Unterklasse Dog umgewandelt1.

Das führt zu einem Problem. Das liegt daran, dass a1Das Objekt kann auch andere Unterklassen referenzieren. Wenn wir zusammen mit Dog eine andere Unterklasse Cat erstellen; Das Tier kann ein Katze oder ein Hund sein, was zu Ambiguität führt.

Um dieses Problem zu lösen, können wir den Operator instanceof verwenden. Hier ist, wie man das macht:

Beispiel6:使用instanceof解决向下类型转换

class Animal {
}
class Dog extends Animal {
  public void displayInfo() {
     System.out.println("Ich bin ein Hund");
  }
}
class Main {
  public static void main(String[] args) {
    Dog d1 = new Dog();
    Animal a1 = d1;    // Typumwandlung nach oben
    if (a1 instanceof Dog) {
       Dog d2 = (Dog)a1;    // Typumwandlung nach unten
       d2.displayInfo();
    }
  }
}

Ausgabe:

Ich bin ein Hund

Im obigen Beispiel verwenden wir den Operator instanceof, um a zu überprüfen1Ob das Objekt ein Beispiel der Klasse Dog ist. Nur wenn der Ausdruck a1 Die Typumwandlung nach unten erfolgt nur, wenn instanceof Dog true ist.

Interface und instanceof

Der instanceof-Operator wird auch verwendet, um zu überprüfen, ob ein Objekt ein Beispiel für eine Klasse ist, die das Interface implementiert.

Beispiel7: instanceof im Interface

interface Animal {
}
class Dog implements Animal {
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      System.out.println("d1Ist das Objekt ein Beispiel für Animal? "+(d1 instanceof Animal));
   }
}

Ausgabe:

d1Ist das Objekt ein Beispiel für Animal? true

Im obigen Beispiel haben wir eine Klasse erstellt, die das Animal-Interface implementiert und Dog ist.

Dann, erstellen Sie ein Objekt der Klasse Dog d1Wir haben den instanceof-Operator verwendet, um d zu überprüfen1Ist das Objekt auch ein Beispiel für den Animal-Interface?