عملگر instanceof

عملگر instanceof در جاوا به شما اجازه می دهد که تست کنید که آیا یک شی یک نمونه از یک نوع خاص (کلاس، زیر کلاس، اینترفیس) است یا نه. عملگر instanceof به دو عملوند نیاز دارد و یک مقدار بولی را برمی گرداند. به عنوان مثال، فرض کنید یک کلاس به نام Animel داریم، سپس یک نمونه از آن ایجاد می کنیم :

   1: package myfirstprogram;
   2: 
   3: class Animal
   4: {
   5: 
   6: }
   7: 
   8: public class MyFirstProgram 
   9: {  
  10:     public static void main(String[] args) 
  11:     {
  12:         Animal myAnimal = new Animal();
  13: 
  14:         if (myAnimal instanceof Animal)
  15:         {
  16:               System.out.println("myAnimal is an Animal!");
  17:         }
  18:     } 
  19: }
myAnimal is an Animal

رفتار عملگر instanceof را در این مثال مشاهده کردید. همانطور که می بینید از آن به عنوان شرط در عبارت if استفاده شده است. کاربرد آن در مثال بالا این است که چک می کند که آیا شی myAnimal یک نمونه از Animal است و چون نتیجه درست است کدهای داخل دستور if اجرا می شود. این عملگر همچنین می تواند چک کند که آیا یک شی خاص در سلسله مراتب وراثت یک نوع خاص است. به این مثال توجه کنید :

   1: package myfirstprogram;
   2: 
   3: class Animal
   4: {
   5: 
   6: }
   7: 
   8: class Dog extends Animal
   9: {
  10: 
  11: }
  12: 
  13: public class MyFirstProgram 
  14: {  
  15:     public static void main(String[] args) 
  16:     {
  17:         Dog myDog = new Dog();
  18: 
  19:         if (myDog instanceof Animal)
  20:         {
  21:               System.out.println("myDog is an Animal!");
  22:         }
  23:     } 
  24: }
myDog is an Animal!

همانطور که در مثال بالا می بینید ما یک کلاس به نام Dog ایجاد کرده ایم که از کلاس Animal ارث می برد. سپس یک نمونه از این کلاس (Dog) ایجاد می کنیم و سپس با استفاده از عملگر instanceof تست می کنیم که آیا نمونه ایجاد شده جز کلاس Animal است یا یک کلاس مشتق شده از کلاس Animal می باشد. از آنجاییکه کلاس Dog از کلاس Animal ارث می برد (سگ من یک حیوان است.)، نتیجه عبارت درست (true) است. حال جمله بالا را تغییر دهیم : ” حیوان من یک سگ است” . وقتی جمله برعکس می شود چه اتفاقی می افتد؟

Animal myAnimal = new Animal();

if (myAnimal instanceof Dog)
{
    System.out.println("myAnimal is a Dog!");
}

این باعث خطا نمی شود و عبارت فقط نتیجه false را بر می گرداند. می توان از کد بالا این را درک کرد که همه حیوانات سگ نیستند ولی همه سگها حیوان هستند.