constructor چیست؟
سلام
می خواستم بدونم constructor چی هست و همچنین (...)super در آن به چه معنا هست؟و با ()super.method چه فرقی دارد؟
کانستراکتور به طور خلاصه و روان میشه گفت یک متدی هست که داخلش یکسری متغییر ها برای اولین بار پر میشن .
کانستراکتور همیشه زمان ساخت کلاسش صدا زده میشه .
متد Super هم زمانی نمایش داده میشه که یک متد در کلاس پدر وجود داشته باشه و در کلاس پسر هم صدا زده بشه که درواقع تمام اتفاقات در متد پدر در اجرای super انجام میشه و اگر شما تغییرات رو قبل از super اعمال کنید اول دستورات کلاس پسر اجرا میشه و بعد دستورات کلاس پدر
سلام.
محمد حسین جان،توضیحات لازمو در مورد کانستراکتور دادن.
فقط میمونه جواب سوال دومتون.
درواقع با استفاده از کلمه کلیدی super شما می تونید به تمام متد های عمومی (public) کلاس پدر دسترسی داشته باشین،که این موضوع شامل کانستراکتور کلاس پدر هم میشه.چون کانستراکتور هم یه متد محسوب میشه،اما یه سری ویژگی خاص داره،از جمله این که مقدار بازگشتی نداره و حتما باید هم نام کلاس باشه.کانستراکتور وقتی استفاده میشه که بخوایم یه شیء جدید از یه کلاس بسازیم.درواقع چیزی که بعد از کلمه کلیدی new هنگام ساخت یک شیء نوشته میشه،همون کانستراکتور اون کلاس مورد نظر هستش.
حالا وقتی یه کلاس جدید می سازیم که از یه کلاس دیگه مشتق شده ،اگه برای مثال بخوایم یه متد رو که در کلاس پدر تعریف شده رو رونویسی(override) کنیم و به همون متد بر حسب نیاز یه سری دستورات جدید اضافه کنیم.کافیه در کلاس فرزند یه متد با همون نام متد کلاس پدر بسازیم و دستورات مورد نظر خودمونو داخلش بنویسیم،حالا اینجاست که نوبت به استفاده از super میرسه!یعنی برای استفاده از دستوراتی که داخل اون متد در کلاس پدر نوشته شده،بجای اینکه دوباره بخوایم همون کدها رو تکرار کنیم کافیه با استفاده از super.method این دستوراتو صدا بزنیم...
منظور از method اسم همون متدیه که تو کلاس پدر تعریف شده بود.
مورد دوم استفاده از super وقتیه که بخوایم کانستراکتور کلاس پدر رو صدا بزنیم.برای اینکار دیگه لازم نیست همراه super اسم کانستراکتور کلاس پدرو ذکر کنیم
یعنی داخل کانستراکتور کلاس فرزند،کانستراکتور کلاس پدر رو صدامیزنیم.برای اینکار داخل کانستراکتور کلاس فرزند از کلمه کلیدی super استفاده می کنیم و باتوجه به کانستراکتور کلاس پدر پارامترهای ورودی لازم رو به super اضافه می کنیم...
برای مثال قطعه کد زیر رو در نظر بگیرین
public class AdapterNote extends ArrayAdapter<StructNote> {
public AdapterNote(ArrayList<StructNote> array) {
super(G.context, R.layout.adapter_notes, array);
}
}
در این مثال AdapterNote کلاسی هست که ما می خوایم بنویسیم(کلاس فرزند).AdapterNote از ArrayAdapter مشتق شده پس ArrayAdapter کلاس پدر هستش.
کد زیر کانستراکتور کلاس فرزنده که ما می خوایم بنویسیم(بسته به نیازی که داریم تعداد پارامترای ورودی می تونه متغیر باشه).
public AdapterNote(ArrayList<StructNote> array) {
}
حالا داخل این متد که کانستراکتر کلاس فرزند هستش،کانستراکتر کلاس پدر رو با استفاده از super با استفاده از کد زیر صدا می زنیم
super(G.context, R.layout.adapter_notes, array);
این کد کانستراکتر کلاس ArrayAdapter (کلاس پدر) رو صدا میزنه.که این کانستراکتور سه تا ورودی داره. که به ترتیب شامل یه Context و یه resource و یه <List<T هست.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .