ورود

View Full Version : کاربرد this و super در جاوا



سینااکبری
سه شنبه 03 آذر 1394, 10:14 صبح
سلام.
میدونم تو انجمن هست، خوندم چندتاشونو ولی چیزی دستگیرم نشد.
تو یکی از آموزشی که دارم دنبال میکنم توضیح داد ولی خیلی پیچیده گفت.
دستور super برای اینه که از یک کلای پابلیک یک چیزی رو به ارث ببریم تو کلاس جدید؟ یک توضیحی بدید ممنون میشم.
دستور this رو که اصلا نفهمیدم، برای اینکه که مثلا تو یک کلاسی که هستیم اگر دوتا متغییر هم نام دارم با چسبوندن this بهش بگیم، منظورمون اینه؟
ممنون

-سیّد-
چهارشنبه 04 آذر 1394, 13:51 عصر
سلام
this اشاره‌گر به شیئی هست که توش هستید. کاربردش هم (علاوه بر بحث خوانایی کد) اینه که وقتی یه متغیر محلی همنام با متغیر کلاس دارید، بتونید به متغیر کلاس دسترسی پیدا کنید. یکی از معمول‌ترین کاربردهاش توی سازنده‌ی کلاس هست:

public class Test {
private String name;

public Test(String name) {
this.name = name;
}
}

داخل سازنده وقتی می‌گیم name خالی، یعنی متغیر محلی (پارامتر ورودی)، و وقتی می‌گیم this.name یعنی متغیر داخل کلاس. پس معنی اون عبارت می‌شه این که متغیر name که مال این شیء هست رو مقدارش رو از روی متغیر name که پارامتر ورودی هست بردار.

super وقتی استفاده می‌شه که می‌خواین از پیاده‌سازی یه تابع در کلاس پدر استفاده کنید. کاربرد اصلیش وقتیه که شما یه تابع رو توی کلاس فرزند رونویسی کردین، و توی اون تابع می‌خواین تابع اصلی که رونویسیش کردین رو فراخوانی کنین:

public class Test {
public String getName() {
return "test";
}
}

public class TestChild extends Test {
@Override
public String getName() {
return super.getName() + " - child";
}
}

اینجا فراخوانی تابع getName در کلاس TestChild باعث می‌شه که مقدار test - child برگردونده بشه. همونطور که می‌بینید، اینجا از super برای فراخوانی تابع رونویسی شده از کلاس پدر استفاده کردیم (اگه می‌نوشتیم:

return getName() + " - child";

باعث می‌شد این تابع خودش رو فراخوانی کنه و در نتیجه توی یه حلقه‌ی بینهایت می‌افتاد).

سینااکبری
چهارشنبه 04 آذر 1394, 14:17 عصر
خیلی از کمکتون ممنونم.

ahmad.mo74
پنج شنبه 05 آذر 1394, 11:26 صبح
یه نکته ای رو هم من اضافه کنم.
همیشه حواستون باشه کجا از this استفاده میکنید.
مثلا داخل Anonymous Inner Class ها :


public class Golabi {


void test() {
new Runnable() {
@Override
public void run() {
// this is not instance of Golabi
Runnable runnable = this;
Golabi golabi = Golabi.this;
}
};
}


}

سینااکبری
پنج شنبه 05 آذر 1394, 15:44 عصر
حتما. ممنون از بزرگواریتون