اشتراک در خبرنامه‌ دارکوب وب

با عضویت در خبرنامه‌ی دارکوب وب مقالات و آموزش‌ها هر هفته به ایمیل شما ارسال می‌شود.

آموزش جاوا(J2SE) قسمت چهارم

در این قسمت از آموزش در مورد constructor و ارث بری در جاوا خواهیم آموخت. با ما همراه باشید.

آشنایی با constructor:

وقتی شی می سازیم ، اگر override اش کنیم ، یک متد به صورت خود کار صدا زده می شود تکرار می کنم اگر override کنیم ، به این متد ، متد constructor می گویند ، ممکن است نیاز داشته باشیم در این متد کدی بنویسیم ، برای دست رسی و کد نویسی در متد constructor به این شکل عمل می کنیم :


package darkoobweb;

public class Parastoo {

static {

}

public parastoo(){

}
}

خوب همان طور که در کد بالا می بینید یک متد static داریم به آن اصطلاحا JVM Constructor می گویند ، و فقط یک بار اجرا می شود حالا هر چند بار که آبجکت بسازید برای او فرقی ندارد .

به public parastoo(){} اصطلاحا Developer Constructor گفته میشود، این متد نه استاتیک است نه void و هر بار که آبجکت ایجاد کنید صدا زده می شود ، به مثال زیر و نتیجه آن دقت کنید .

public class Parastoo {

 static {

 System.out.println("salam man JVM constructor hastam va faghat ye bar ejra misham ");

 }


 public Parastoo() {
 System.out.println("salam man Developer constructor hastam va har bar ejra misham");

 }
}


public class Derakht {
public static void main(String[] args) {

Parastoo parastoo = new Parastoo();
Parastoo parastoo1 = new Parastoo();
Parastoo parastoo2 = new Parastoo();

}
}

کلاسی به نام درخت ساختم و داخل آن از کلاس پرستو ۳ آبجکت ایجاد کردم ، اگر این کد را اجرا کنید ، رشته های زیر برای شما چاپ می شود.

 

salam man JVM constructor hastam va faghat ye bar ejra misham

salam man Developer constructor hastam va har bar ejra misham

salam man Developer constructor hastam va har bar ejra misham

salam man Developer constructor hastam va har bar ejra misham

 

همان طور که مشاهده می کنید ، رشته ای که در کانستراکتور استاتیک بود فقط یک بار چاپ شد ، اما ما ۳ آبجک ساختیم ، و رشته ای که در دولوپر کانستراکتور بود ، ۳ بار چاپ شد .

دقت کنید که برای مشاهده این رشته ها ما کدی را که در کلاس main بود را اجرا کردیم .

یکی از موارد استفاده از کانستراکتورها زمانی است که می خواهید همان موقعی که آبجکتی ساخته می شود مقادیری در سطح کلاس وارد شود ، بهترین راهکار کانستراکتور است.

 

ارث بری :

می خواهم مثال ساده ای ، برای ارث بری به شما نشان بدهم ، با خانواده آقای دارکوب وب آشناشوید.

 

اولین فرد هومن است ، کار او تیر اندازیست ،

هومن پسری به نام محمد دارد ، شغل محمد ساختمان سازی با چوب است ،

محمد پسری به نام مرتضی دارد ، شغل مرتضی مدیریت است ،

مرتضی پسری به نام ژیگو دارد ، کار ژیگو ساختمان سازی با آهن است.

 

حالا پکیجی به نام ersbari ایجاد می کنیم داخل آن کلاس ها را به این شکل می نویسیم :

تصویر پکیج :

 

picTwoETwo

کلاس ها :


package ersbari;

public class Hooman {


 public void tirAndazi(){
 System.out.println("Bang Bang");
 }
}

package ersbari;

public class Mohamad extends Hooman{


 public void sakhtan(){

 System.out.println("Sakhtam ba chub");

 }
}

package ersbari;

public class Morteza extends Mohamad{

 public void modiriat(){
 System.out.println("Man modiram Haha");
 }
}

package ersbari;

public class Zhigo extends Morteza{

 public void sakhtan(){
 System.out.println("Ba ahan sakhtam huhu");
 }
}

در کلاس Main از روی ژیگویک آبجکتی می سازیم به کد زیر دقت کنید:


package ersbari;

public class Main {

public static void main(String[] args) {

Zhigo zhigo = new Zhigo();

zhigo.tirAndazi();
zhigo.sakhtan();
zhigo.modiriat();

}
}

همان طور که مشاهده می کنید ، ژیگو می تواند هم تیراندازی کند هم ساختمان سازی هم مدیریت ، چرا ؟ چون این مهارت ها را از پدرش به ارث برده و پدر او ار پدرش …

اما موضوع قابل توجه این است که اگر کد را اجرا کنید ، متد ساختنی اجرا می شود که در کلاس ژیگو است و این کد می گوید با آهن ساختم هوهو ، و متدی که در پدربزگ ژیگو یعنی محمد وجود دارد چاپ نمی شود  ، زیرا ژن فرزند بر ژن پدر قالب است و متد ژیگو اینجا صدا زده می شود ، اگر بخواهیم به متد محمد هم دست رسی داشته باشم می توانیم از کلمه کلیدی super به این شکل استفاده کنیم .


package ersbari;

public class Zhigo extends Morteza {


 public void sakhtan() {
 super.sakhtan();
 System.out.println("Ba ahan sakhtam huhu");
 }
}

همان طور که می بیند به این شکل از super استفاده کردیم ، در این حال متد پدر صدا زده می شود .

 

کلاس انتضاعی یا Abstract Class :

خوب حتما خانواده هایی را دیده اید که پدر عقده پزشکی مهندیسی یا وکالت داشته و فرزند خود را مجبور می کند در آن رشته تحصیل کنید ، در برنامه نویسی کلاس هایی داریم که کلاس فرزند را مجبور می کنند متدی را پیاده سازی کند.

به این کلاس ها کلاس عقده ای یا Abstract گویند ، فرض کنید مرتضی عقده پزشکی داشته باشد ، در این صورت ژیگو باید پزشکی بخواند، به کد های زیر دقت کنید :


package ersbari;


public abstract class Morteza {

 public void modiriat(){
 System.out.println("Man modiram Haha");
 }

 public abstract void pezeshki();
}

خوب این کلاس مرتضا است ، این یک کلاس عقده ای می باشد و عقده آن پزشکی است ، می بینید که از کلمه کلیدی abstract استفاده کردیم هم در ساخت کلاس هم در ساخت متد ، این متد را در کلاس مرتضی پیاده سازی نمی کنیم ، و پیاده سازی آن توسط کلاس ژیگو انجام میشود.


package ersbari;


public class Zhigo extends Morteza {


 public void sakhtan() {
 System.out.println("Ba ahan sakhtam huhu");
 }

 @Override
 public void pezeshki() {
 System.out.println("man majbur shodam pezeshki bekhunam");
 }
}

در این کلاس شما باید متد pezeshki را پیاده سازی کنید ، در غیر این صورت برنامه شما دچار خطا خواهد شد . همان طور که در کد می بینید @override در کد نوشته شده ، به کاری که ما کردیم ، override کردن متد می گویند و این علامت @Override انوتیشن override است .

درباره نویسنده

پوریا

سلام ، من پوریا هستم با جاوا آشنایی دارم به هوش مصنوعی و امنیت علاقه مندم و امید وارم آموزش هایی که در وب سایت قرار می دم برای شما مفید باشه ، موفق باشید {^}

نظر دهید

سوالات، انتقادات و پیشنهادات خود را در مورد این مطلب برای ما بفرستید. :-)