خرداد ۸, ۱۳۹۸ Mostafa بدون دیدگاه

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

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

آموزش تعیین کنندگان دسترسی در جاوا

در جاوا دو نوع تعیین کننده یا تعریف کننده وجود دارد: access modifier ها که تنظیم کنندگان سطح دسترسی هستند و non-access modifier.

تعیین کننده دسترسی یا تنظیم کنندگان سطح دسترسی در جاوا سطح و میزان دسترسی (حوزه ی دسترسی) به یک متغیر، متد، تابع سازنده (constructor) یا کلاس را تعیین می کنند.

4 تنظیم کننده ی سطح دسترسی در جاوا به شرح زیر می باشند :

private
default
protected
public

 

تعداد زیادی non-access modifier مانند static، abstract، synchronized، native، volatile، transient و غیره … در جاوا وجود دارد . در مبحث حاضر به شرح access modifier خواهیم پرداخت.
1) تنظیم کننده ی سطح دسترسی private

فیلد یا متدی که با سطح دسترسی private تعریف شده باشد، تنها داخل کلاس میزبان قابل دسترسی می باشد.
مثال کابردی ساده از private access modifier

در این مثال، دو کلاس به نام های A و simple داریم. کلاس A یک متد و متغیر private دارد. در نمونه ی حاضر سعی داریم از بیرون به اعضای کلاس که با سطح دسترسی private تعریف شده است، دسترسی پیدا کنیم.

همان طور که انتظار می رود، خطای زمان کامپایل رخ می دهد :

class A{  
private int data=40;  
private void msg(){System.out.println("Hello java");}  
}  
public class Simple{  
 public static void main(String args[]){  
   A obj=new A();  
   System.out.println(obj.data);//خطای زمان کامپایل
   obj.msg();//Compile Time Error  
   }  
}

نقش تابع سازنده ی private

اگر تابع سازنده ی یک کلاس را private تعریف کنید، در آن صورت دیگر نمی توانید نمونه ای از آن کلاس خارج از خود کلاس ایجاد کنید. مثال:

class A{  
private A(){}//سازنده خصوصی
void msg(){System.out.println("Hello java");}  
}  
public class Simple{  
 public static void main(String args[]){  
   A obj=new A();//Compile Time Error  
 }  
}

نکته: در جاوا تنها کلاس های تعریف شده داخل کلاس دیگر  می توانند با سطح دسترسی private یا protected تعریف شوند.

تنظیم کننده ی سطح دسترسی پیشفرض

اگر برای یک عضو از کلاس از تعیین کننده خاصی استفاده نکنید، به صورت پیش فرض با کلیدواژه ی default علامت گذاری می شود. عضوی که با این کلیدواژه علامت گذاری می شود، تنها از داخل package میزبان قابل دسترسی می باشد.
مثال کاربردی از کلیدواژه ی default

در مثال کاربردی حاضر، دو پکیج به نام های pack و mypack ایجاد کرده ایم. در این مثال، سعی داریم به کلاس A از بیرون package میزبان آن، دسترسی داشته باشیم. از آنجایی که کلاس A با سطح دسترسی public تعریف نشده است، تنها داخل package میزبان خود قابل دسترسی می باشد.

//save by A.java  
package pack;  
class A{  
  void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
import pack.*;  
class B{  
  public static void main(String args[]){  
   A obj = new A();//Compile Time Error  
   obj.msg();//Compile Time Error  
  }  
}

 

در مثال بالا، حوزه ی دسترسی کلاس A و متد موجود در آن msg()، با کلیدواژه ی default نشانه گذاری می شوند، به همین دلیل از بیرون package میزبان خود قابل دسترسی نیستند.

تنظیم کننده ی سطح دسترسی protected

protected یک تنظیم کننده ی سطح دسترسی است که تنها دسترسی به اعضای کلاس را از طریق وراثت امکان پذیر می داند. به عبارت دیگر اعضایی از کلاس که با protected علامت گذاری شده باشند، هم داخل package و هم خارج از آن تنها از طریق ارث بری دسترس پذیر هستند.

تنظیم کننده ی سطح دسترسی protected می تواند به متد، متغیر و تابع سازنده (constructor) اعمال شود. نمی توان این کلیدواژه را بر روی کل کلاس اعمال کرد.

مثال کاربردی از protected

در مثال پایین ، دو package به نام های pack و mypack ایجاد می کنیم. کلاس A از پکیج pack با سطح دسترسی public تعریف شده و از بیرون پکیج میزبان دسترس پذیر می باشد. اما همان طور که در نمونه ی زیر مشاهده می کنید، متد msg() از کلاس نام برده با کلیدواژه ی protected نشانه گذاری شده است و به همین دلیل تنها کلاس های خارجی با ارث بری کلاس میزبان آن می توانند به متد مذکور دسترسی داشته باشند.

//save by A.java  
package pack;  
public class A{  
protected void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
import pack.*;  
class B extends A{  
  public static void main(String args[]){  
   B obj = new B();  
   obj.msg();  
  }  
}

تنظیم کننده ی سطح دسترسی public

کلیدواژه ی public سبب می شود کلاس یا عضو علامت گذاری شده با آن از کل برنامه قابل دسترسی باشد.

مثال کاربردی از تعیین کننده سطح دسترسی public

//save by A.java  
package pack;  
public class A{  
public void msg(){System.out.println("Hello");}  
}  
//save by B.java  
package mypack;  
import pack.*;  
class B{  
  public static void main(String args[]){  
   A obj = new A();  
   obj.msg();  
  }  
}

آشنایی با تمامی access modifier های java

در جدول زیر تمامی access modifier های جاوا به همراه سطح یا حوزه ی دسترسی هر یک به نمایش گذاشته شده است.

تعیین کننده سصح دسترسیداخل کلاسداخل پکیجخارج از پکیج از طریق کلاس فرزند (وراثت)خارج از پکیج
PrivateYNNN
DefaultYYNN
ProtectedYYYN
PublicYYYY

 

استفاده از تعیین کننده سطح دسترسی همراه با بازنویسی متد در کلاس فرزند (method overriding)

اگر متدی را بازنویسی می کنید، متد بازنویسی شده (متدی که پیاده سازی آن داخل کلاس فرزند بازنویسی می شود) نباید محدودیت بیشتری داشته باشد.

class A{  
protected void msg(){System.out.println("Hello java");}  
}  
public class Simple extends A{  
void msg(){System.out.println("Hello java");}//C.T.Error  
 public static void main(String args[]){  
   Simple obj=new Simple();  
   obj.msg();  
   }  
}

تعیین کننده های سطح دسترسی default نسبت به protected، محدودیت بیشتری اعمال می کند. به همین دلیل در زمان کامپایل برنامه، خطا رخ می دهد.

 

 


توجه : برای دانلود فایل از سایت باید در انجمن وارد شوید.

برچسب ها
نظرات

نظرات،سوالات،مشکلات،پیشنهادات خود را از طریق انجمن ارسال بفرمایید