الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في جافا Polymorphism

بدأه aboShoraih في 3 مايو 2008 · 6 رد · 1,602 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سؤالي حول تعددية الأشكال في جافا أو (ploymorphism)


{

public Test1()
{

} // constructor


private int dd()
{
System.out.println(" i am in father ");
return 1000;
}

public class Test1


{


public Test2()
{

} // constructor

public int dd()
{
System.out.println(" i am in child ");
return 1000;
} // meth
public class Test2 extends Test1


{
public static void main(String arg[])
{

Test1 t=new Test2();
System.out.println(t.dd());

} // main

} // class
public class Test

على حسب الكود السابق و بالتركيز على الدالة dd , ستكون النتيجة الخطأ التالي كما في المرفق :

فما هو سبب الخطأ ؟

post-77774-1209835225_thumb.jpg

تم تعديل هذه المشاركة بواسطة aboShoraih في 3 مايو 2008 في 20:30

#2

السلام عليكم

الكائن t في الكود الأخير هو من النمط Test1 و ليس من النمط Test2

(على الرغم من أن تهيئته تمت من خلال الباني الخاص بـ Test2 إلا أن هذا لن يغير نمطه من Test1 إلى Test2 )

و بالتالي عند الاستدعاء

t.dd()

فإننا نستدعي التابع dd الخاص بـ Test1 (وهو private) و ليس الخاص بـ Test2 (و هو public)

إذاً سبب الخطأ هو أن التابع dd المستدعى هو تابع خاص (private) و ليس عام (public)

و بالتالي فهو غير مرئي (invisible) بالنسبة للصف المستدعي Test

و الله أعلم

أبو خالد السوري

#3

جزاك الله خيرا اخي ابو خالد ,,

لكن أخي في تعددية الاشكال او ploymprphism يوجد شيئ اسمه : virtual method Invocation

يعني حتى لا أطيل أكثر :

استبدل المحدد private الموجود عند الدالة dd في الأب الى المحدد public مثلاً ..

يعني :

public int dd ()

فانظر ما سيكون خرج البرنامج .. و ماالجملة التي سيطبعها على الشاشة ..

سيطبق الدالة التي عند الإبن و ليس التي عند الأب كما حصل في الحالة السابقة أو السؤال السابق ..

#4

لكي يطبع ما عند الابن

يشترط أن يكون عن الأب مثله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

عفوا اخي alaadiaa

كلامك غير مفهوم ..

ماذا تعني بـ (لكي يطبع ما عند الابن يشترط أن يكون عن الأب مثل ) هل تقصد ترويسة الطريقة ام ماذا ؟

ارجو التوضيح ..

ملاحظة : زرت مدونتك الأدبية و اهنيك عليها على معلوماتها الطيبة و القيمة ..

#6

عندما يكون لديك مؤشر من الأب

على كائن من أبنائه

لكي تستطيع التعامل مع أي دالة

من الكائن الابن يجب أن تكون الدالة متواجدة في فئة الأب

أتمنى أن تكون الفكرة وضحت

aboShoraih كتب:
ملاحظة : زرت مدونتك الأدبية و اهنيك عليها على معلوماتها الطيبة و القيمة ..

شكراً على الإطراء

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

أخي الفاضل المشكلة لديك أن الأب فيه private int dd()

صححها وأكتب public int dd()

لأنه أخي الفاضل، لو كان الأب فيه عنصر private صحيح أن الإبن سيرثه لكنه لن يكون قادراً على التعامل معه والوصول إليه Direct.

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

مواضيع مشابهة