ممنون بابت توجه شما... من خیلی جستجو کردم و الان با این صحبتهای شما و مطالبی که این چندروزه یادگرفتم یه برداشتی دارم که پایین کامل دربارهاش مینویسم لطفا در ادامه پاسخ بدید که من مطمئن بشم برداشتم چقدر درست و چقدر غلط بوده ممنون.
خب من الان میتونم بگم که لیست یه تعریف کلی از یک کلاس یا اینترفیس هستش که قرار برای ما قوانین انجام یک کاری رو تعریف کنه و زمانی که داریم List رو implement میکنیم روی دو کلاس Stack , Queue درواقع از دیدگاه لیست داریم دوتا برداشت میکنیم یا بهتره بگیم که داریم دوتا کار انجام میدیم با قوانینی که برای لیست تعریف کردیم.
List aList = new Stack();
List aList = new Queue();
میتونم اینطور بگم که aList ظاهرا List هستش اما داره کاره Stack رو انجام میده یا مثلا کاره Queue رو انجام میده نمیدونم.
یک مثالی یکی از استادام زد که برام گنگ بود الان که شما گفتید متوجه شدم که چیکار میکنه این پایین کدش رو میزارم همون مثال Player بود
public interface Player(){
public void Play();
}
public class Mp3Player implement Player{
public void Play(){
System.out.println("Player Play Mp3");
}
}
public class Mp4Player implement Player{
public void Play(){
System.out.println("Player Play Mp4");
}
}
الان من این کد رو کامل متوجه شدم زمانی که من میگم
Play multimediaPlayer = new Mp3Player();
در واقع من یک کار رو تعریف کردم بصورت کلی به نام Play که کارش پخش کردن هستش الان با فراخوانی کانستراکتور Mp3Player دارم نوع کاری که باید انجام بده رو تعیین میکنم خیلی جالبه پس مفهوم چندریختی میشه این واقعا ممنونم اصلا یه دنیای جدید بروم باز شد یه دیگه خیلی جالب از برنامه نویسی تاز فهمیدم این کار به چه دردی میخوره.!
aList در ظاهر یک لیست هستش اما داره کاره یک ArrayList رو انجام میده و قطعا رفتارش مثل یک ArrayList هست پس منم باید رفتارم با اون مثل یک ArrayList باشه.
همونجوری که ممکنه مثل یک Stack یا Queue رفتار کنه.
متشکرم بابت آموزشتون ممنون.