View Full Version : سوال: کلاس های انتزاعی در جاوا
mojtaba5
جمعه 07 آذر 1393, 22:19 عصر
یه تیکه از کتاب هست به نظرم جا انداختن :
http://upload.tehran98.com/upme/uploads/3b592171ac3c7b491.jpg (http://upload.tehran98.com/upme/)
توی پاراگراف سوم فکر کنم باید مینوشت : " می توانید از زیر کلاس یک کلاس انتزاعی شیئی را نمونه سازی کنید...."
درسته؟
محمد فدوی
جمعه 07 آذر 1393, 22:48 عصر
آره اینطور به نظر میاد. خب مطرح کردن اشکالهای نگارشی یه کتاب توی انجمن چه سودی میتونه داشته باشه؟ اگر هم واقعا بخشی از کتاب رو نمیتونید بخونید با این ایرادها بهتره همهش رو توی یه تاپیک بپرسید.
موفق باشید.
mojtaba5
جمعه 07 آذر 1393, 22:52 عصر
چون دارم کتابو میخونم اشتباه به نظرم میاد اینجا مطرح میکنم.
mojtaba5
جمعه 07 آذر 1393, 22:53 عصر
اما توی یه فایل آموزشی دیدم نوشته بود برای ایجاد ارجاعات شیء میشه ازش استفاده کرد. و به هیچ وجه نمیشه شی رو نمونه سازی کرد.
بالاخره کدومش درسته؟
cups_of_java
شنبه 08 آذر 1393, 08:23 صبح
شما زمانی می تونی از یک کلاس شی درست کنی که اون کلاس انتزاعی (Abstract) نباشه حالا فرقی نمیکنه که خودش متد انتزاعی داره یا باباش داشته و این پیاده سازی نکردتش یا ...
mojtaba5
شنبه 08 آذر 1393, 09:56 صبح
شما زمانی می تونی از یک کلاس شی درست کنی که اون کلاس انتزاعی (Abstract) نباشه حالا فرقی نمیکنه که خودش متد انتزاعی داره یا باباش داشته و این پیاده سازی نکردتش یا ...
خب الان تکلیف این جمله چی میشه؟
درسته یا غلط؟
محمد فدوی
شنبه 08 آذر 1393, 11:50 صبح
درسته شما میتونی از یه کلاس یه ارجاع (یه اشاره گر خالی) درست کنی. اما نمیتونی اون رو مقداردهی کنی. واسه همینه که گفته میشه از یه کلاس انتزاعی ارجاع ساخت اما نمیشه اونو نمونه سازی کرد. فرض کن کلاس Parent یه کلاس انتزاعی باشه و کلاس Child فرزند کلاس Parent که انتزاعی هم نیست. الان ما میتونیم یه اشاره گر از کلاس Parent بسازیم:
Parent obj1;
یا حتی اون رو با کلاس Child مقداردهی کنیم. چون کلاس Child فرزند Parent هست اینکار امکان پذیره:
Parent obj2 = new Child();
اما نمیتونیم یه شیء از Parent رو با خود این کلاس مقداردهی کنیم (این کد اشتباهه):
Parent obj2 = new Parent();
این قضایا هم همونطور که cups_of_javaعزیز گفت، هیچ ربطی به تعداد یا محل پیاده سازی متدها (چه متدهای انتزاعی چه غیر انتزاعی) نداره. درسته، اگه Child بخواد Parent رو ارث بری کنه و خودش هم انتزاعی نباشه باید تمام متدهای انتزاعی Parent رو پیاده سازی کنه اما اون اصلا ربطی به حرفایی که اینجا زدم نداره.
مثال عملیش رو میتونی در مورد کلاسهای AbstractButton و JButton در جاوا تست کنی.
mojtaba5
شنبه 08 آذر 1393, 12:20 عصر
داداشم آقای فدوی اگه بخوایم صحیح جمله رو بنویسیم چی باید بگیم؟
cups_of_java
شنبه 08 آذر 1393, 13:00 عصر
موضوع ارجاع ربطی به انتزاعی بودن یا نبودن کلاس نداره. به طور کلی هر کلاسی که شما تعریف میکنی یک نوع جدید هستش. و شما به هر نوعی که دلت بخواد میتونی متغیر ارجاع درست کنی و این هیچ مشکلی نداره. اما نوع واقعی ای که شی ای که ایجاد خواهد شد و اون ارجاع بهش اشاره خواهد کرد چی باشه داستان دیگه ای هستش.
متاسفانه بعضی متون یه طوری می نویسن که یه مطلب خیلی معمولی و ساده پیچیده میشه طوریکه آدم اصن نمی فهمه داستان چیه...
ahmad.mo74
شنبه 08 آذر 1393, 16:48 عصر
سلام، از یک abstract class میشه آبجکت گرفت به دو شرط :
1- اینکه زمان new کردن متد های abstract رو پیاده سازی کنی :
public abstract class AbstractClass {
public abstract void abstractMethod();
}
public class Test {
public static void main(String[] args) {
AbstractClass abstractClass = new AbstractClass() {
@Override
public void abstractMethod() {
//...
}
};
}
}
2- یا اینکه کلاس فرزندی باشه که متد های abstract پدر رو پیاده سازی کرده باشه :
public abstract class Parent {
public abstract void abstractMethod();
}
public class Child extends Parent {
@Override
public void abstractMethod() {
//...
}
}
public class Test {
public static void main(String[] args) {
Parent parent = new Child();
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.