PDA

View Full Version : سوال: سوال راجب casting



ghazal.g
یک شنبه 30 تیر 1392, 22:36 عصر
سلام دوستان . من یه تمرین دارم که متاسفانه هر چیم جستجو می کنم جوابی براش پیدا نمی کنم
می خوام بدونم چطوری میشه وقتی یه متد فرزند روی متد پدر اور رایت میشه بشه به مقدار متد پدر دسترسی داشت؟

پیشاپیش ممنون از دوستانی که جواب میدن

lexical_error
یک شنبه 30 تیر 1392, 23:48 عصر
سلام
اوصلا وقتی متدی رو Override میکنید جاوا دیگه تو کلاسهای بالاتر دنبال اون متد نمیگرده اما برای اجرای متدها در فوق کلاس از دستور super استفاده میشه
super.MethodName

ghazal.g
دوشنبه 31 تیر 1392, 18:26 عصر
ببخشید میشه یکم بیشتر توضیح بدید؟ من درست متوجه نشدم

lexical_error
دوشنبه 31 تیر 1392, 22:06 عصر
ببینید معمولا برای override یک متد دو دلیل وجود دارد
1- جایگزین کردن کامل تعریف متد اولیه
2-تقویت یک متد با رفتارهای جدید

حالا فرض میکنیم که تو فوق کلاس یک متد داریم به اسم testMethod با این signature
void testMethod(int arg1,String arg2)
{
...
}

حالا وقتی که بخوایم این متد رو در زیرکلاس override کنیم و همچنین از متد فوق کلاس در این متد استفاده کنیم این کاررو انجام میدیم

void testMethod(int arg1,String arg2)
{
//statements

super.testMethod(arg1,arg2);

//statements
}

اون دستور super باعث میشه که متد با همان عملکرد در فوق کلاس ، در متد زیر کلاس اجرا شود.

ghazal.g
یک شنبه 06 مرداد 1392, 19:32 عصر
خیلی خیلی ممنون از کمکتون . حالا اگه بخوایم به متد پدر بزرگ دسترسی داشته باشیم هم راهی هستش .

منظورم اینه که سه تا متد داشته باشیم که به ترتیب از هم اکستند شدن و بخوایم توی داخلی ترین متد به مقدار متد اولی دسترسی داشته باشیم

esmaeilbf
دوشنبه 07 مرداد 1392, 00:20 صبح
فکر کنم منظورتون سه تا کلاس هست که از هم مشتق شدن، خب هدف از ارث بری همینه دیگه که شما مجبور نباشید از اول فیلدها رو تعریف کنید بله شما به تمام فیلدها و متدهای public و protected کلاس پدر دسترتسی دارین

cups_of_java
دوشنبه 07 مرداد 1392, 00:22 صبح
خیلی خیلی ممنون از کمکتون . حالا اگه بخوایم به متد پدر بزرگ دسترسی داشته باشیم هم راهی هستش .

منظورم اینه که سه تا متد داشته باشیم که به ترتیب از هم اکستند شدن و بخوایم توی داخلی ترین متد به مقدار متد اولی دسترسی داشته باشیم

super.super.method_xyz();