محلی برای یادگیری جاوا

۲ مطلب در مهر ۱۳۹۴ ثبت شده است

Constructor یا سازنده 2

 پست قبل در مورد سازنده کلاس بود. در این پست به سازنده ها در جریان وراثت می پردازم. فرض می کنیم یک کلاس به نام Parent داریم به شکل زیر:

public class Parent {
public Parent()
{
...
}
}

حال فرض می کنیم این کلاس یک subclass به نام Child داشته باشد. همانطور که قبلا اشاره شد در زمان ساخت یک شی یا نمونه (Instance) از کلاس، متد سازنده ی آن فراخوانی می شود. اگر کلاسی فرزند کلاس دیگر باشد در این حالت باید بدانیم که در constructor آن باید constructor کلاس پدر نیز به نوعی فراخوانی شود. این کار از طریق استفاده از متد ()super انجام می شود. به شکل زیر:

public class Child extends Parent {
public Child(){
super();
...
}
}

حال فرض کنیم که constructor کلاس پدر argument هایی به عنوان ورودی دارد. در این حالت باید زمان نوشتن constructor برای فرزند پارامترهای ورودی constructor پدر را درون متد ()super بفرستیم:

public class Parent {
String name;
public Parent(String name)
{
....
}
}
public class Child extends Parent {
public Child(String name){
super(name);
...
}
}

پس طبق آنچه دیده می شود اگر constructor کلاس پدر ورودی داشته باشد constructor کلاس فرزند هم نمی تواند بدون ورودی باشد. اما اینطور نیست. یعنی میتوانیم ورودی های constructor پدر را به روشی ارسال کنیم که constructor کلاس فرزند هیچ ورودی نداشته باشد برای اینکاربه روش زیر می توانیم عمل کنیم:

public class Child extends Parent {
String name="Parisa";
public Child(){
super(name);
...
}
}

قبلا در پست مربوط به static گفت بودم که متغیر های غیر استاتیک متعلق به instance یا نمونه ی کلاس و متغیر های استاتیک متعلق به کلاس هستند. پس برای استفاده از متغییر های غیر استاتیک مانند متغیر name در کلاس Child باید حتما نمونه ای از کلاس Child ساخته شود و کد نوشته شده به شکل بالا دچار خطا می شود. پس با توجه به توضیحات داده شده متغیر name ر اباید بصورت static تعریف کنیم:

public class Child extends Parent {
static String name="Parisa";
public Child(){
super(name);
...
}
}
۱۲ مهر ۹۴ ، ۱۹:۰۲ ۰ نظر موافقین ۱ مخالفین ۰
پریسا

Constructor یا سازنده

همه برنامه نویسان با مفهوم Constructor یا سازنده آشنا هستند. Constructor ها متدهایی بدون خروجی و هم نام با کلاس هستند که زمان ساخت شی ی از کلاس invoke می شوند:

public class Person {
String name;
int age;

public Person() {
...
}
public Person(String name, int age) {
...
}
}

اگر برنامه نویس Constructor ی برای کلاس ننویسد کامپایلر جاوا (javac) یک Constructor پیش فرض برای آن ها تولید می کند. 

برای یک کلاس همانطور که در بالا دیده می شود می توان چندین Constructor نوشت. به این عمل Constructor overloading گفته می شود. که مشابه همان مفهوم Overloading در جاواست.

نکته1: در یک کلاس می توان چندین متد همنام داشت که پارامتر های ورودی آنها متفاوت است به این عمل Overloading گفته می شود.

نکته2: به constructor بدون ورودی اصطلاحا default constructor گفته می شود.

۰۵ مهر ۹۴ ، ۱۶:۳۳ ۰ نظر موافقین ۱ مخالفین ۰
پریسا