logo

مثيل جافا

  1. مثيل جافا
  2. مثال على عامل التشغيل
  3. تطبيق عامل التشغيل مع متغير له قيمة فارغة
  4. Downcasting مع مثيل المشغل
  5. Downcasting دون مثيل المشغل

ال عامل تشغيل مثيل جافا يتم استخدامه لاختبار ما إذا كان الكائن مثيلًا للنوع المحدد (فئة أو فئة فرعية أو واجهة).

يُعرف مثيل Java أيضًا بالنوع عامل المقارنة لأنه يقارن المثيل بالنوع. فإنه يعود إما صحيح أو خطأ. إذا قمنا بتطبيق عامل التشغيل على أي متغير له قيمة فارغة، فإنه يُرجع خطأ.

نظرية الشجرة والرسم البياني

مثال بسيط لمثيل جافا

دعونا نرى المثال البسيط لمشغل المثيل حيث يختبر الفئة الحالية.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
اختبره الآن
 Output:true 

كائن من نوع الفئة الفرعية هو أيضًا نوع من الفئة الأصلية. على سبيل المثال، إذا قام Dog بتوسيع Animal، فيمكن إحالة كائن Dog إما بفئة Dog أو Animal.

مثال آخر على مشغل 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 

مثيل في جافا مع متغير له قيمة فارغة

إذا قمنا بتطبيق عامل تشغيل مثيل مع متغير له قيمة فارغة، فإنه يُرجع خطأ. دعونا نرى المثال الموضح أدناه حيث نطبق عامل التشغيل مع المتغير الذي له قيمة فارغة.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
اختبره الآن
 Output:false 

Downcasting مع عامل تشغيل Java

عندما يشير نوع الفئة الفرعية إلى كائن من الفئة الأصل، يُعرف ذلك باسم البث السفلي. إذا قمنا بتنفيذ ذلك مباشرة، فإن المترجم يعطي خطأ في الترجمة. إذا قمت بتنفيذ ذلك عن طريق الكتابة، فسيتم طرح ClassCastException في وقت التشغيل. ولكن إذا استخدمنا عامل التشغيل، يكون البث السفلي ممكنًا.

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

إذا قمنا بإجراء downcasting عن طريق typecasting، فسيتم طرح ClassCastException في وقت التشغيل.

إطار جمع جافا
 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

إمكانية downcasting مع مثيل

دعونا نرى المثال، حيث يكون البث السفلي ممكنًا بواسطة عامل التشغيل.

 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 

البث دون استخدام نسخة جافا

يمكن أيضًا إجراء عملية Downcasting دون استخدام عامل تشغيل مثيل كما هو معروض في المثال التالي:

 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 

فهم الاستخدام الحقيقي للمثيل في Java

دعونا نرى الاستخدام الحقيقي لمثيل الكلمة الرئيسية من خلال المثال الموضح أدناه.

 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