View Full Version : سوال: upcasting ?
esmaeilbf
چهارشنبه 09 مرداد 1392, 00:49 صبح
سلام
در کد زیر دقیقا چه اتفاقی افتاده و به چه منظوری انجام میشه؟
B me = new A();
class B{
public void p(){
System.out.println("Class B");
}
}
public class A extends B {
public void w(){
System.out.println("class A");
}
public static void main(String[] args) {
B me = new A();
me.p();//output: Class B
me.w();//not avilable
}
}
senior_foe
پنج شنبه 10 مرداد 1392, 22:58 عصر
یه روش Polymorphism متداوله. به Casting ربطی نداره.
متغیر me از نوع B هست و چون A از B ارث میبره پس میگیم: A is a B
پس می تونیم یک شیء جدید از A درست کنیم و اون رو به یه متغیر از نوع B تخصیص بدیم.
مثلاً اگه بگیم Chair is a Furniture اون وقت:
Furniture foo = new Chair();
منطقیه دیگه نه؟!
esmaeilbf
پنج شنبه 10 مرداد 1392, 23:42 عصر
خیلی ممنونم
خب این کار upcasting هم میگن و علاوه بر این downcasting هم داریم
senior_foe
جمعه 11 مرداد 1392, 04:51 صبح
داری درست میگی و من اشتباه گفتم که به Casting ربطی نداره! در اون خط کد یک upcasting بطور ضمنی توسط JVM انجام میشه. البته upcasting رو ما انجام نمیدیم خود JVM انجام میده. ما اینجا فقط داریم یه شیء میسازیم و مقدار دهی اولیه میکنیم. میتونیم بگیم در اجرای اون خط کد upcasting اتفاق میفته.
ولی Downcasting بطور دستی انجام میشه مثل این که بگیم:
((A) me).w();
در این حالت me با Downcast شدن به A متد w رو در دسترس خواهد داشت.
cups_of_java
جمعه 11 مرداد 1392, 17:54 عصر
داری درست میگی و من اشتباه گفتم که به Casting ربطی نداره! در اون خط کد یک upcasting بطور ضمنی توسط JVM انجام میشه. البته upcasting رو ما انجام نمیدیم خود JVM انجام میده. ما اینجا فقط داریم یه شیء میسازیم و مقدار دهی اولیه میکنیم. میتونیم بگیم در اجرای اون خط کد upcasting اتفاق میفته.
ولی Downcasting بطور دستی انجام میشه مثل این که بگیم:
((A) me).w();
در این حالت me با Downcast شدن به A متد w رو در دسترس خواهد داشت.
دقیقن! حالا درست تر شد.
چون Upcasting خطر ناک نیست (جرا نیست؟) اتوماتیک انجام میشه
ولی Downcasting خطرناکه (چرا؟) خود برنامه نویس دستی انجامش میده که تبعاتش پذیرفته باشه.
توجه کنید که با Upcasting هست که اصن Polymorphysm از این نوعش (از طریق وراثت) امکانپذیر میشه.
zare_programmer
سه شنبه 15 مرداد 1392, 17:44 عصر
دقیقن! حالا درست تر شد.
چون Upcasting خطر ناک نیست (جرا نیست؟) اتوماتیک انجام میشه
ولی Downcasting خطرناکه (چرا؟) خود برنامه نویس دستی انجامش میده که تبعاتش پذیرفته باشه.
توجه کنید که با Upcasting هست که اصن Polymorphysm از این نوعش (از طریق وراثت) امکانپذیر میشه.
خطرناک بودن downcasting، فک میکنم یه خاطر ازدست رفتن داده ها باشه
مثلا اگه بخوایم یه متغیر از نوع long رو درون متغیر از نوع int بریزیم، خب مسلما جا نمیشه و واسه اینه که میتونه خطرناک باشه
cups_of_java
سه شنبه 15 مرداد 1392, 19:04 عصر
در مورد primitiveها کاملن درسته
در مورد اشیا هم خطرناکه چون وقتی یک شی از پدری رو به یکی از فرزندهاش بخوای downcast کنی مطمن نیستی واقعن از جنس کدوم پسره و ممکنه به فرزند اشتباهی downcast بشه و خطا بگیری
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.