logo

Upcasting وDowncasting في جاوة

تُعرف عملية تحويل نوع بيانات إلى نوع آخر باسم تلبيس و نبذ و إسقاط هو نوع من نوع الكائن. في Java، يمكن أيضًا كتابة الكائن مثل أنواع البيانات. الأبوين و طفل الكائنات نوعان من الكائنات. لذا، هناك نوعان من الكتابة الممكنة لكائن ما، أي: الوالدين للطفل و الطفل إلى الوالدين أو يمكن القول نبذ و إسقاط .

في جافا ، يمكن أيضًا كتابة الكائن مثل أنواع البيانات. الأبوين و كائنات الطفل نوعان من الكائنات. لذا، هناك نوعان من الكتابة الممكنة لكائن ما، أي: الوالدين للطفل و الطفل إلى الوالدين أو يمكن القول نبذ و إسقاط .

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

Upcasting وDowncasting في جاوة

دعونا نتعمق في كلا النوعين من صب الكائنات:

خوارزمية فرز الكومة

1) الارتقاء

نبذ هو نوع من أنواع الكائنات التي فيها أ كائن طفل يتم كتابته إلى أ كائن الفئة الأصل . باستخدام Upcasting، يمكننا بسهولة الوصول إلى متغيرات وأساليب الفئة الأصل إلى الفئة الفرعية. هنا، لا يمكننا الوصول إلى جميع المتغيرات والطريقة. نحن نصل فقط إلى بعض المتغيرات والأساليب المحددة للفئة الفرعية. نبذ ومن المعروف أيضا باسم تعميم و اتساع .

الذي جعل المدرسة

UpcastingExample.java

 class Parent{ void PrintData() { System.out.println('method of parent class'); } } class Child extends Parent { void PrintData() { System.out.println('method of child class'); } } class UpcastingExample{ public static void main(String args[]) { Parent obj1 = (Parent) new Child(); Parent obj2 = (Parent) new Child(); obj1.PrintData(); obj2.PrintData(); } } 

انتاج:

Upcasting وDowncasting في جاوة

2) الإسقاط

نبذ هو نوع آخر من أنواع الكائنات. في Upcasting، نقوم بتعيين كائن مرجعي للفئة الأصلية للفئة الفرعية. في Java، لا يمكننا تعيين كائن مرجعي للفئة الأصلية للفئة الفرعية، ولكن إذا قمنا بإجراء البث الهابط، فلن نحصل على أي خطأ في وقت الترجمة. ومع ذلك، عندما نقوم بتشغيله، فإنه يلقي 'استثناء كلاس كاست' . النقطة المهمة الآن هي أنه إذا كان البث السفلي غير ممكن في Java، فلماذا يسمح به المترجم؟ في Java، تسمح لنا بعض السيناريوهات بإجراء البث الهابط. هنا، يتم إحالة كائن الفئة الفرعية بواسطة الفئة الأصل.

فيما يلي مثال على البث السلبي الذي يتم فيه شرح السيناريوهات الصالحة وغير الصالحة:

DowncastingExample.java

 //Parent class class Parent { String name; // A method which prints the data of the parent class void showMessage() { System.out.println('Parent method is called'); } } // Child class class Child extends Parent { int age; // Performing overriding @Override void showMessage() { System.out.println('Child method is called'); } } public class Downcasting{ public static void main(String[] args) { Parent p = new Child(); p.name = 'Shubham'; // Performing Downcasting Implicitly //Child c = new Parent(); // it gives compile-time error // Performing Downcasting Explicitly Child c = (Child)p; c.age = 18; System.out.println(c.name); System.out.println(c.age); c.showMessage(); } } 

انتاج:

Upcasting وDowncasting في جاوة

لماذا نحتاج إلى Upcasting و Downcasting؟

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

حالة بوابة
Upcasting وDowncasting في جاوة

الفرق بين Upcasting و Downcasting

هذه هي الاختلافات التالية بين Upcasting و Downcasting:

نعم / لا نبذ إسقاط
1. يتم كتابة كائن فرعي إلى كائن أصل. يتم تمرير مرجع كائن الفئة الأصل إلى الفئة الفرعية.
2. يمكننا إجراء Upcasting بشكل ضمني أو صريح. ضمنا Downcasting غير ممكن.
3. في الفئة الفرعية، يمكننا الوصول إلى أساليب ومتغيرات الفئة الأصلية. يمكن الوصول إلى الأساليب والمتغيرات لكل من الفئات (الأصل والطفل).
4. يمكننا الوصول إلى بعض الطرق المحددة للفئة الفرعية. يمكن الوصول إلى كافة الأساليب والمتغيرات لكلا الفئتين عن طريق إجراء البث السفلي.
5. الوالد ع = الوالد الجديد () الأصل ع = طفل جديد ()
الطفل ج = (الطفل) ص؛