PDA

View Full Version : سوال: تفاوت این دو خط کد چیه(collection)؟



kiarashfir13
جمعه 15 شهریور 1392, 19:37 عصر
1. List <E> obj =new ArrayList<E>();




2. ArrayList<E> obj=new ArrayList<E>();



ه نظرتون تفاوت اين دو خط چیه؟ اگه ميشه کامل توضيح بدين




ممنون دوستان

DigitalRain
یک شنبه 17 شهریور 1392, 10:06 صبح
خط اول نوع متغیر obj از List هست که به یک ArrayList اشاره می‌کنه تو خط دوم obj یک اشاره‌گر(بهتر بگم، رفرنس) به یک نمونه(instance) از کلاس ArrayList هست.

به این کد دقت کن:

class BaseClass{

}

class ChildClass extends BaseClass {
void method() {
System.out.println("method Called!");
}
}


اگر نوع متغیرتون از Base باشه ولی از Child نیو کنید و تو متغیر ذخیره کنید، اون متغیر متد method رو داره ولی همینطوری با عملگر . نمی‌تونید صداش بزنید چون وقتی از . استفاده می‌کنید کامپایلر به خود متغیر نگاه می‌کنه نه به جایی که داره بهش اشاره می‌کنه. یعنی::

BaseClass obj = new ChildClass();

obj.method();
// کامپایل ارور

// روش برطرف کردن:
((ChildClass)obj).method();


اصلش تو پولی مورفیسم کاربرد داره

cups_of_java
یک شنبه 17 شهریور 1392, 14:25 عصر
همونطور که دوستمون گغت نمونه یک برای کاربرد های پلی مرفیک استفاده میشه. وقتی شما از پدر ها استفاده می کنی یعنی داری شی ات رو تو یه نوع کلی تر نگهداری می کنی. اینطوری می تونی از خیلی از توابعی که اون پدر ها رو دارن و برای کاربرد های کلی نوشته شدن رو فراخوانی کنی.
در مواردی حتی اینطوری می نویسن:
Collection <E> obj =new ArrayList<E>();
اینطوری شما می تونی obj رو به تمام متد های کتابخانه Collection‌جاوا که اگه دقت کنی می بینی همشون Collection‌میگیرن پاس کنی. (بدون down casting)

kiarashfir13
چهارشنبه 20 شهریور 1392, 01:05 صبح
همونطور که دوستمون گغت نمونه یک برای کاربرد های پلی مرفیک استفاده میشه. وقتی شما از پدر ها استفاده می کنی یعنی داری شی ات رو تو یه نوع کلی تر نگهداری می کنی. اینطوری می تونی از خیلی از توابعی که اون پدر ها رو دارن و برای کاربرد های کلی نوشته شدن رو فراخوانی کنی.
در مواردی حتی اینطوری می نویسن:
Collection <E> obj =new ArrayList<E>();
اینطوری شما می تونی obj رو به تمام متد های کتابخانه Collection‌جاوا که اگه دقت کنی می بینی همشون Collection‌میگیرن پاس کنی. (بدون down casting)

ممنونم ازتون برای کمک .

فقط یه سوال دیگه دارم . همین سوال اولی که مطرح کردم فقط توی پلی مورفیسم به کار میاد دیگه؟ درسته ؟ وگرنه با هم توی استفاده از کالکشن array list

تفاوت چندانی ندارند. درسته؟ فقط اینکه توی نمونه 1 باید یه casting انجام داد . درسته؟

cups_of_java
چهارشنبه 20 شهریور 1392, 12:41 عصر
آره توی پولیمورفیزم استفاده میشه.
فرقشون اینه که توی اولی شما متد های لیست رو میبینی اما توی دومی متد های ArrayList رو هم می بینی توی obj! یعنی اینکه توی اولی نمی تونی متدهای ArrayList رو صدا بزنی روی obj! (واسه همین باید cast کنی دیگه