در این آموزش کلیدواژۀ super
را معرفی میکنیم که از جمله کیوردهای مورد استفاده در وراثت و مباحث مربوط به دسترسی به متغیرها و متدهای تعریفشده در کلاسهای به اصطلاح Superclass یا «کلاسهای والد» میباشد. در واقع، کیورد super
به منظور دسترسی به متدها و متغیرهای کلاس والد در کلاس فرزند مورد استفاده قرار میگیرد (جهت کسب اطلاعات بیشتر در رابطه مفهوم وراثت، توصیه میکنیم به آموزش آشنایی با مفهوم وراثت در زبان برنامهنویسی جاوا مراجعه نمایید.)
بهکارگیری کیورد super به منظور دسترسی به متغیرهای کلاس اصلی
در این بخش از آموزش به منظور درک بهتر مطالب ارائهشده، ابتدا پروژهای به نام Super ایجاد کرده و سه کلاس در آن تحت عناوین SubClass
،SuperClass
و ActionClass
میسازیم که کلاس سوم به عنوان نقطۀ شروع برنامه بوده و در حین ساخت آن نیز تیک گزینۀ public static void را میزنیم. در ادامه، کلاس SuperClass
را به صورت زیر تکمیل مینماییم:
public class SuperClass {
int speed = 280;
public void showLexusSpeed() {
System.out.println("Lexus speed is " + speed);
}
}
در کد فوق، داخل کلاس SuperClass
با استفاده از دیتا تایپ int
یک متغیر فیلد تحت عنوان speed
ایجاد کرده و مقدار اولیۀ آن را معادل عدد 280 قرار دادهایم سپس یک متد از جنس void
تحت عنوان ()showLexusSpeed
تعریف کردهایم که این وظیفه را دارا است تا در صورت فراخوانی، مقدار منتسب به متغیر speed
را با استفاده از عملگر +
با استرینگ «Lexus speed is» کانکت کرده و در کنسول چاپ نماید. اکنون کلاس SubClass
را به گونهای پیادهسازی مینماییم تا از کلاس SuperClass
ارثبری کند:
public class SubClass extends SuperClass {
int speed = 260;
public void showToyoTaSpeed() {
System.out.println("Toyota speed is " + speed);
}
}
همانطور که در کد فوق مشاهده میکنیم، کلاس SubClass
از کلاس SuperClass
ارثبری میکند که این کار را با استفاده از کیورد extends
انجام دادهایم سپس با استفاده از دیتا تایپ int
متغیری به نام speed
تعریف کرده و این بار مقدار 260 را بدان اختصاص دادهایم. در ادامه، متدی تحت عنوان ()showToyotaSpeed
در این کلاس تعریف کرده و دستورات داخلی متد مذکور به منظور چاپ مقدار منتسب به متغیر speed
به همراه استرینگ «Toyota speed is» در بخش کنسول را در آن نوشتهایم.
اکنون قصد داریم تا آبجکتی از روی کلاس SubClass
ساخته و بدین ترتیب به متد کلاس مذکور دسترسی داشته و آن را در کلاس ActionClass
روی آبجکت جدید ساختهشده فراخوانی نماییم که برای این منظور کلاس ActionClass
را به صورت زیر تکمیل میکنیم:
public class ActionClass {
public static void main(String[] args) {
SubClass myObject = new SubClass();
myObject.showToyoTaSpeed();
}
}
در کد فوق، آبجکتی از روی کلاس SubClass
به نام myObject
ساخته سپس متد ()showToyotaSpeed
از این کلاس را روی آبجکت myObject
فراخوانی کردهایم به طوری که در خروجی خواهیم داشت:
Toyota speed is 260
همانطور که مشاهده میکنیم، اجرای برنامۀ فوق منجر به فراخوانی متد ()showToyotaSpeed
شده و در نتیجه استرینگ مربوطه در کنسول چاپ میشود. نکتۀ قابلتوجه در ارتباط با متغیر speed
این است که متغیر مذکور هم در SuperClass
و هم در SubClass
تعریف شده است و علیرغم ارثبری کلاس SubClass
از SuperClass
، آبجکت ساختهشده از روی این کلاس متغیر speed
از کلاس فرزند را مد نظر قرار داده و در فراخوانی متد ()showToyotaSpeed
نیز آن را به عنوان آرگومان ورودی به متد مذکور داده است.
حال فرض کنیم اگر بخواهیم تا در فراخوانی متد ()showToyotaSpeed
از کلاس SubClass
مقدار منتسب به متغیر speed
از کلاس SuperClass
مد نظر قرار داده شده و مقدار آن در کنسول چاپ شود که در چنین شرایطی میتوانیم کیورد super
را به صورت زیر مورد استفاده قرار دهیم:
public class SubClass extends SuperClass {
int speed = 260;
public void showToyoTaSpeed() {
System.out.println("Toyota speed is " + super.speed);
}
}
در کد فوق، کیورد super
را پیش از نام متغیر speed
قرار داده سپس یک علامت .
و در نهایت نام متغیر را نوشتهایم که در این صورت میتوانیم به مقدار منتسب به متغیر speed
از کلاس اصلی دسترسی داشته باشیم به طوری که اگر مجدداً برنامه را اجرا کنیم، در خروجی خواهیم داشت:
Toyota speed is 280
همانطور که ملاحظه میکنیم، درج کیورد super
در کنار نام متغیر منجر بدین شده است تا مقدار منتسب به متغیر مذکور از SuperClass
در متد ()showToyoTaSpeed
متعلق به کلاس SubClass
در نظر گرفته شده و به همراه استرینگ مربوطه در کنسول نمایش داده شود.
بهکارگیری کیورد super به منظور دسترسی به متدهای کلاس اصلی
در این بخش از آموزش قصد داریم تا به بررسی نحوۀ استفاده از کلیدواژۀ super
جهت فراخوانی متدهای کلاس والد در کلاس فرزند بپردازیم که برای درک بهتر مطلب، کد مربوط به کلاس SuperClass
را به صورت زیر بازنویسی میکنیم:
public class SuperClass {
public void showSuperClass() {
System.out.println("This is the SuperClass method");
}
}
در کد فوق، متدی تحت عنوان ()showSuperClass
تعریف نمودهایم که این وظیفه را دارا است تا در صورت فراخوانی، استرینگ «This is the SuperClass method» را در کنسول چاپ نماید. در ادامه، به صورت زیر اقدام به بازنویسی کلاس SubClass
مینماییم:
public class SubClass extends SuperClass {
public void showSubClass() {
System.out.println("This is the SubClass method");
}
}
در کد فوق، متدی تحت عنوان ()showSubClass
تعریف کرده و در آن گفتهایم که در صورت فراخوانی، استرینگ «This is the SubClass method» را در کنسول نمایش دهد و در نهایت کد کلاس ActionClass
را به صورت زیر بازنویسی میکنیم:
public class ActionClass {
public static void main(String[] args) {
SubClass myObject = new SubClass();
myObject.showSubClass();
}
}
در کد فوق، آبجکتی تحت عنوان myObject
از روی کلاس SubClass
ساخته و در ادامه متد ()showSubClass
از کلاس SubClass
را روی آن فراخوانی کردهایم به طوری که پس از اجرای برنامه در خروجی خواهیم داشت:
This is the SubClass method
همانطور که انتظار داشتیم، استرینگ مربوط به کلاس SubClass
در کنسول چاپ شده است. اکنون اگر بخواهیم با استفاده از کلیدواژۀ super
متد ()showSuperClass
از SuperClass
را داخل متد ()showSubClass
از کلاس SubClass
فراخوانی نماییم، میباید کد کلاس SubClass
را به شکل زیر ویرایش نماییم:
public class SubClass extends SuperClass {
public void showSubClass() {
System.out.println("This is the SubClass method");
super.showSuperClass();
}
}
در حقیقت، با نوشتن کلیدواژۀ super
و قرار دادن یک .
سپس نوشتن نام متد ()showSuperClass
از کلاس والد، به متد کلاس مورد نظر در کلاس فرزند دسترسی داشته و آن را فراخوانی مینماییم به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:
This is the SubClass method
This is the SuperClass method
همانطور که مشاهده میکنیم، علاوه بر متد ()showSubClass
از کلاس SubClass
متد ()showSuperClass
از کلاس SuperClass
نیز با استفاده از دستور super
فراخوانی شده و منجر به چاپ استرینگ مربوطه در کنسول شده است.