- מופע של java
- דוגמה למופע של אופרטור
- החלת המופע של האופרטור עם משתנה יש ערך null
- הורדה עם מופע של מפעיל
- הורדה ללא מופע של מפעיל
ה מופע 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