Introduction
Dans ce laboratoire (lab), vous apprendrez à vérifier si un objet est d'un type spécifique en Java en utilisant l'opérateur instanceof. Vous commencerez par comprendre l'utilisation de base de instanceof avec différentes classes, y compris l'héritage.
Vous testerez ensuite l'opérateur instanceof avec différents types de classes et explorerez son comportement avec les sous-classes et les superclasses. Enfin, vous apprendrez à gérer les objets nuls lors de l'utilisation de instanceof pour éviter les erreurs potentielles.
Utiliser l'opérateur instanceof
Dans cette étape, vous allez apprendre à propos de l'opérateur instanceof en Java. L'opérateur instanceof est utilisé pour tester si un objet est une instance d'une classe particulière ou implémente une interface particulière. C'est un outil utile pour vérifier le type d'un objet à l'exécution.
Créons un simple programme Java pour démontrer le fonctionnement de l'opérateur instanceof.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE s'il n'est pas déjà ouvert.Remplacez tout le contenu du fichier par le code suivant :
class Animal { public void makeSound() { System.out.println("Generic animal sound"); } } class Dog extends Animal { public void makeSound() { System.out.println("Woof!"); } } class Cat extends Animal { public void makeSound() { System.out.println("Meow!"); } } public class HelloJava { public static void main(String[] args) { Animal myAnimal = new Dog(); if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } } }Dans ce code :
- Nous définissons une classe de base
Animalet deux sous-classesDogetCat. - Dans la méthode
main, nous créons une variableAnimalnomméemyAnimalet nous lui assignons un objetDog. - Nous utilisons ensuite l'opérateur
instanceofpour vérifier simyAnimalest une instance deDog,CatetAnimal.
- Nous définissons une classe de base
Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme en utilisant la commande
javacdans le terminal :javac HelloJava.javaExécutez le programme compilé en utilisant la commande
java:java HelloJavaVous devriez voir un résultat indiquant quelles vérifications
instanceofont retournétrue.myAnimal is an instance of Dog myAnimal is an instance of AnimalComme vous pouvez le voir,
myAnimalest une instance deDog(parce que nous avons créé un objetDog) et également une instance deAnimal(parce queDogest une sous-classe deAnimal). Il n'est pas une instance deCat.
Tester avec différentes classes
Dans l'étape précédente, vous avez vu comment instanceof fonctionne avec une sous-classe et sa superclasse. Maintenant, explorons son comportement lorsqu'il est utilisé pour tester des classes différentes et non liées.
Nous allons modifier le fichier HelloJava.java existant pour inclure une autre classe et tester l'opérateur instanceof avec des objets de différents types.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE.Ajoutez une nouvelle classe appelée
Carau fichier. Vous pouvez ajouter cette définition de classe avant ou après les classesAnimal,DogetCat, mais en dehors de la classeHelloJava.class Car { public void drive() { System.out.println("Driving a car"); } }Maintenant, modifions la méthode
maindans la classeHelloJavapour créer un objetCaret tester l'opérateurinstanceof. Mettez à jour la méthodemainpour qu'elle ressemble à ceci :public class HelloJava { public static void main(String[] args) { Animal myAnimal = new Dog(); Car myCar = new Car(); if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } System.out.println("--- Testing Car object ---"); if (myCar instanceof Car) { System.out.println("myCar is an instance of Car"); } if (myCar instanceof Animal) { System.out.println("myCar is an instance of Animal"); } } }Nous avons ajouté un nouvel objet
CarnommémyCaret inclus des vérificationsinstanceofpour lui par rapport àCaretAnimal.Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme modifié :
javac HelloJava.javaExécutez le programme :
java HelloJavaObservez la sortie. Vous devriez voir les résultats de l'étape précédente, suivis des résultats des nouvelles vérifications pour l'objet
Car.myAnimal is an instance of Dog myAnimal is an instance of Animal --- Testing Car object --- myCar is an instance of CarCette sortie confirme que
myCarest une instance deCar, mais ce n'est pas une instance deAnimalcarCarn'hérite pas deAnimal. L'opérateurinstanceofidentifie correctement la relation de type (ou son absence) entre les objets et les classes.
Gérer les objets null
Dans cette étape finale, nous allons explorer le comportement de l'opérateur instanceof lorsqu'il est utilisé avec des objets null. Comprendre ceci est important pour éviter des erreurs inattendues dans vos programmes.
Une référence null en Java signifie qu'une variable ne fait référence à aucun objet. Lorsque vous utilisez l'opérateur instanceof avec une référence null, il renverra toujours false. C'est une fonctionnalité de sécurité intégrée à l'opérateur.
Modifions le fichier HelloJava.java une dernière fois pour inclure un objet null et tester l'opérateur instanceof.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE.Modifiez la méthode
maindans la classeHelloJavapour inclure une référenceAnimalnullet la tester. Mettez à jour la méthodemainpour qu'elle ressemble à ceci :class Animal { public void makeSound() { System.out.println("Generic animal sound"); } } class Dog extends Animal { public void makeSound() { System.out.println("Woof!"); } } class Cat extends Animal { public void makeSound() { System.out.println("Meow!"); } } class Car { public void drive() { System.out.println("Driving a car"); } } public class HelloJava { public static void main(String[] args) { Animal myAnimal = new Dog(); Car myCar = new Car(); Animal nullAnimal = null; // Déclare une référence Animal null if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } System.out.println("--- Testing Car object ---"); if (myCar instanceof Car) { System.out.println("myCar is an instance of Car"); } if (myCar instanceof Animal) { System.out.println("myCar is an instance of Animal"); } System.out.println("--- Testing null object ---"); if (nullAnimal instanceof Animal) { System.out.println("nullAnimal is an instance of Animal"); } if (nullAnimal instanceof Dog) { System.out.println("nullAnimal is an instance of Dog"); } } }Nous avons ajouté une nouvelle variable
AnimalnomméenullAnimalet l'avons initialisée ànull. Nous effectuons ensuite des vérificationsinstanceofavec elle.Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme :
javac HelloJava.javaExécutez le programme :
java HelloJavaObservez la sortie. Vous devriez voir les résultats des étapes précédentes, suivis des résultats des vérifications pour
nullAnimal.myAnimal is an instance of Dog myAnimal is an instance of Animal --- Testing Car object --- myCar is an instance of Car --- Testing null object ---Notez que les lignes à l'intérieur des blocs
ifpournullAnimalne sont pas affichées. C'est parce quenullAnimal instanceof AnimaletnullAnimal instanceof Dogévaluent toutes les deux àfalse. Cela démontre que l'opérateurinstanceofgère correctement les référencesnullen renvoyantfalse.
Comprendre le fonctionnement de instanceof avec null est crucial pour écrire un code Java robuste qui évite les erreurs de type NullPointerException.
Résumé
Dans ce laboratoire, vous avez appris à vérifier si un objet est d'un type spécifique en Java en utilisant l'opérateur instanceof. Vous avez pratiqué l'utilisation de instanceof avec différentes classes, y compris une classe de base et ses sous-classes, pour déterminer le type d'un objet à l'exécution. Vous avez également exploré le comportement de instanceof lors de la vérification par rapport à la classe réelle de l'objet, à sa superclasse et à des classes non liées.



