آموزش final در جاوا چیست؟

آموزش final در جاوا چیست؟
تاریخ بروزرسانی : 23 مرداد 1399 | تعداد بازدید : 3323 | زمان خواندن مقاله : 10دقیقه
جاوا،

Final در زبان جاوا اگر متغیری را همراهی کند مقدار اولیه آن متغیر ثابت بوده و دیگر تغییر نمی کند، اگر برای متد تعریف شود آن متد دیگر قابل override یا همان بازنویسی نیست و رفتار آن ثابت است و ویرایش در کلاس فرزند نخواهد بود و در نهایت اگر final را برای کلاس به کار ببریم، قابلیت وراثت خود را از دست داده و دیگر امکان ایجاد کلاس فرزند وجود نخواهد داشت. پس به طور کلی می توان گفت در زبان Java، کلید واژه final برای محدود کردن به کار می رود و در سه زمینه متغیر، متد و کلاس قابل استفاده می باشد.

تعریف متغیر:


اگر بخواهیم متغیری از نوع فاینال داشته باشیم به روش زیر عمل می کنیم:

final int variable;

 

مثال:

public class Rahman {
final int a = 5;
public static void main(String[] args) {
Rahman r = new Rahman();
r.a = 6;
System.out.println(r.a);
}
}


خروجی:
خطای کامپایل!!!!!!!!

در این برنامه ما متغیر a را از نوع فاینال تعریف کردیم که مقدار آن برابر 5  است و ما در متد main قصد تغییر این متغیر را داشتیم، به همین دلیل با خطای کامپایل مواجه شدیم. متغیری که از نوع final تعریف می شود دراصطلاح به آن متغیر ثابت یا constant می گویند.

آموزش جاوا

تعریف متد:


در صورتی که بخواهیم متدی را از نوع final به کار ببریم به صورت زیر تعریف می کنیم:

public final void myMethod(){};


مثال:

class Bike{
final void run(){System.out.println("running");}
}
class Honda extends Bike{
void run(){System.out.println("running safely with 100kmph");}
public static void main(String args[]){
Honda honda= new Honda();
honda.run();
}
}


خروجی:
خطای کامپایل!!!!!!!!

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

 

بیشتر بدانید: اگر به مطالب زبان برنامه نویسی جاوا علاقه‌مند هستید به شما پیشنهاد میکنیم که مقاله تزریق وابستگی در جاوا سایت درسمن را مطالعه کنید.

 

تعریف کلاس:

final class Bike {
}
class Honda1 extends Bike {
void run() {
System.out.println(“running safely with 100kmph”);
}
public static void main(String args[]) {
Honda1 honda = new Honda();
honda.run();
}
}

 

خروجی:
خطای کامپایل!!!!!!!!

در اینجا چون کلاس Bike از نوع final است دیگر نمی توان این کلاس را توسط کلاس دیگر به ارث برد و به همین دلیل با خطای کامپایل مواجه می شویم.


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

 

  1. متد تعریف شده از نوع فاینال به ارث برده می شود؟

می خواهیم با بیان مثالی، تکلیف این موضوع را مشخص کنیم:

class Bike {
final void run() {
System.out.println("running...");
}
}
class Honda2 extends Bike {
public static void main(String args[]) {
new Honda2().run();
}
}


همان طور که می بینید کلاس Honda2 از کلاس Bike ارث برده و متد run در کلاس Bike از نوع فاینال می باشد. پس به تمام متدها و متغیرهای آن دسترسی دارد و با ساختن شی از کلاس Honda2 با وجود final بودن متد run زمانی که آن را فراخوانی کردیم با مشکلی مواجه نشدیم.جواب این سوال همان طور که حدس زدید بله است اما یادتان نرود که نمی توان آن را override کرد.

 

  1. آیا می توان متغیری از نوع فاینال را بدون مقدار دهی اولیه ایجاد کرد؟
public class Rahman {
final int a;
Rahman() {
a = 5;
}
public static void main(String[] args) {
Rahman r = new Rahman();
System.out.println(r.a);
}
}


خروجی:
5

 

ما در مثال بالا متغیر a را از نوع فاینال و بدون مقداردهی اولیه تعریف کردیم و برای اینکه از شر خطای کامپایل فرار کنیم، تنها یک راه نجات برای ما باقی می ماند و آن هم راهی نبود جز مقداردهی متغیر final درون سازنده کلاس که ما در سازنده کلاسمان مقدار 5 را به متغیر a نسبت دادیم. پس اگر درست حدس زده اید و جوابتان بله است به شما آفرین می گوییم. اما باید این نکته را در نظر بگیرید که در هنگام تعریف یک متغیر از نوع final هیچ مقداری را به آن ندهیم و مقدار اولیه متغیر final ما خالی باشد.

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

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

 


کلمات کلیدی :
جاوا