logo

מופע של Java

  1. מופע של java
  2. דוגמה למופע של אופרטור
  3. החלת המופע של האופרטור עם משתנה יש ערך null
  4. הורדה עם מופע של מפעיל
  5. הורדה ללא מופע של מפעיל

ה מופע java של מפעיל משמש כדי לבדוק אם האובייקט הוא מופע מהסוג שצוין (מחלקה או תת-מחלקה או ממשק).

המופע של ב-Java ידוע גם כ-type מפעיל השוואה כי זה משווה את המופע לסוג. זה מחזיר נכון או לא נכון. אם נחיל את האופרטור instanceof עם כל משתנה שיש לו ערך null, הוא מחזיר false.

דוגמה פשוטה של ​​Java instanceof

בואו נראה את הדוגמה הפשוטה של ​​אופרטור מופע שבו הוא בודק את המחלקה הנוכחית.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
בדוק את זה עכשיו
 Output:true 

אובייקט מסוג תת-מחלקה הוא גם סוג של מחלקה אב. לדוגמה, אם כלב מרחיב את החיה, ניתן להפנות את האובייקט של הכלב על ידי כלב או בעלי חיים.

דוגמה נוספת לאופרטור Java

 class Animal{} class Dog1 extends Animal{//Dog inherits Animal public static void main(String args[]){ Dog1 d=new Dog1(); System.out.println(d instanceof Animal);//true } } 
בדוק את זה עכשיו
 Output:true 

instanceof ב-java עם משתנה בעל ערך null

אם נחיל instanceof אופרטור עם משתנה בעל ערך null, הוא מחזיר false. בוא נראה את הדוגמה שניתנה להלן שבה אנו מיישמים מופע של אופרטור עם המשתנה שיש לו ערך null.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
בדוק את זה עכשיו
 Output:false 

הורדה עם מופע Java של מפעיל

כאשר סוג תת-מחלקה מתייחס לאובייקט של מחלקת אב, זה ידוע בשם הורדה. אם נבצע את זה ישירות, מהדר נותן שגיאת קומפילציה. אם אתה מבצע את זה על ידי שידור, ClassCastException נזרק בזמן ריצה. אבל אם אנחנו משתמשים ב-instanceof operator, הורדה אפשרית.

 Dog d=new Animal();//Compilation error 

אם אנו מבצעים הורדה על ידי העברת סוגים, ClassCastException נזרק בזמן ריצה.

 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

אפשרות להורדה עם instanceof

בוא נראה את הדוגמה, שבה הורדה אפשרית על ידי מופע של אופרטור.

 class Animal { } class Dog3 extends Animal { static void method(Animal a) { if(a instanceof Dog3){ Dog3 d=(Dog3)a;//downcasting System.out.println('ok downcasting performed'); } } public static void main (String [] args) { Animal a=new Dog3(); Dog3.method(a); } } 
בדוק את זה עכשיו
 Output:ok downcasting performed 

הורדה ללא שימוש ב-java instanceof

ניתן לבצע הורדה גם ללא שימוש ב-instanceof operator כפי שמוצג בדוגמה הבאה:

 class Animal { } class Dog4 extends Animal { static void method(Animal a) { Dog4 d=(Dog4)a;//downcasting System.out.println('ok downcasting performed'); } public static void main (String [] args) { Animal a=new Dog4(); Dog4.method(a); } } 
בדוק את זה עכשיו
 Output:ok downcasting performed 

בואו נסתכל מקרוב על האובייקט הזה, הממשי שאליו מתייחס a, הוא אובייקט במחלקת Dog. אז אם נפיל את זה, זה בסדר. אבל מה יקרה אם נכתוב:

 Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator 

הבנת שימוש אמיתי ב-instanceof ב-java

בוא נראה את השימוש האמיתי של מופע של מילת מפתח לפי הדוגמה שניתנה להלן.

q1 q2 q3 q4
 interface Printable{} class A implements Printable{ public void a(){System.out.println('a method');} } class B implements Printable{ public void b(){System.out.println('b method');} } class Call{ void invoke(Printable p){//upcasting if(p instanceof A){ A a=(A)p;//Downcasting a.a(); } if(p instanceof B){ B b=(B)p;//Downcasting b.b(); } } }//end of Call class class Test4{ public static void main(String args[]){ Printable p=new B(); Call c=new Call(); c.invoke(p); } } 
בדוק את זה עכשיו
 Output: b method