جاوا

جلسه ۱۹: سطح های دسترسی در جاوا

در این جلسه، با اعضای private، public و protected آشنا خواهید شد. در این جلسه موارد زیر را بررسی خواهیم کرد:
  • سطح دسترسی Private یا خصوصی
  • سطح دسترسی Public یا عمومی
  • سطح دسترسی Protected یا محافظت شده
  • سطح دسترسی پیش فرض
در جاوا ، می توانیم محدودیت های دسترسی را بر روی داده ها و متدها اعمال کنیم. محدودیت ها از طریق تعیین کننده ها سطح دسترسی (access modifier) مشخص می شوند. تعیین کننده های دسترسی برچسب هایی هستند که می توانیم به هر یک از اعضا بدهیم و با اینکار مشخص کنیم کدام قسمت از برنامه می تواند به طور مستقیم به آن دسترسی داشته باشد. سه نوع سطح دسترسی وجود دارد. آنها را یک به یک بررسی می کنیم.

سطح دسترسی Private یا خصوصی

از خارج از کلاس نمی توان مستقیماً به یک عضو private دسترسی داشت. هدف این است که آن عضو از دید کاربران و سایر کلاس ها پنهان شود. این امری رایج است که اعضای داده را به صورت private اعلام کنیم زیرا نمی خواهیم داده هایمان بدون کنترل ما دستکاری شود چون ممکن است داده ها به شکل نادرستی تغییر داده شود. می توان با استفاده از کلمه کلیدی private اعضا را خصوصی کرد.

class Cop {
  
  private int gun; // We have explicitly defined that the variable is private
  // ...
}
package justice;

public class Cop {
  private int gun;
  public int getGun(){
    return gun;  
  }
  protected void fire(){
    System.out.println("shoot!")
  }
}
package crime;  
import justice.*; 

class Thief{  
  public static void main(String args[]){  
   Cop obj = new Cop();  
   obj.fire(); //Compile Time Error  
  }  
}
کلاس Thief یک خطای زمان کامپایل ایجاد می کند زیرا در تلاش است به متد محافظت شده ()fire از کلاس Cop دسترسی پیدا کند که در پکیج دیگری تعریف شده است. همانطور که گفته شد یکی از کاربرد های سطح دسترسی protected مربوط به ارث بری کلاس ها است. ما بعداً مبحث ارث بری را پوشش خواهیم داد ، بنابراین در حال حاضر از ورود به جزئیات ارث بری خودداری خواهیم کرد.

سطح دسترسی پیش فرض

اگر سطح دسترسی را مشخص نکنیم ، سطح دسترسی پیش فرض را استفاده کرده ایم. سطح دسترسی پیش فرض مشابه protected است. سطح دسترسی پیش فرض فقط به اعضای داخل همان پکیج امکان دسترسی می دهد. ولی سطح دسترسی protected علاوه بر همان پکیج به کلاس های ارث بر از سایر پکیج ها هم امکان دسترسی می دهد. بنابراین ، می توان گفت که دسترسی پیش فرض محدودتر از دسترسی protected است. ما اشاره مختصری به نحوه ایجاد اعضای داده در یک کلاس کردیم. در جلسه بعدی ، به جزئیات بیشتر در مورد این موضوع خواهیم پرداخت.
Cop c = new Cop(); // Object created
c.getGun(); // Can access the gun
c.gun = 0; // This would cause an error since gun is private

سطح دسترسی Protected یا محافظت شده

دسته protected یا محافظت شده دسته ی خاصی است. سطح دسترسی اعضای protected جایی بین private (خصوصی) و public (عمومی) قرار دارد. کاربرد اصلی برچسب protected را می توان هنگام استفاده از وراثت ، که فرایند ایجاد کلاس هایی از کلاس های دیگر است ، یافت. پکیج برای مرتب کردن کد استفاده می شود و یک پکیج می تواند شامل چندین کلاس باشد. به اعضای protected یک کلاس می توان در داخل پکیج همان کلاس دسترسی داشت. ولی خارج از پکیج آن کلاس اعضای protected آن کلاس فقط از طریق کلاس های ارث برنده از آن کلاس قابل دسترسی هستند.
package justice;

public class Cop {
  private int gun;
  public int getGun(){
    return gun;  
  }
  protected void fire(){
    System.out.println("shoot!")
  }
}
package crime;  
import justice.*; 

class Thief{  
  public static void main(String args[]){  
   Cop obj = new Cop();  
   obj.fire(); //Compile Time Error  
  }  
}
کلاس Thief یک خطای زمان کامپایل ایجاد می کند زیرا در تلاش است به متد محافظت شده ()fire از کلاس Cop دسترسی پیدا کند که در پکیج دیگری تعریف شده است. همانطور که گفته شد یکی از کاربرد های سطح دسترسی protected مربوط به ارث بری کلاس ها است. ما بعداً مبحث ارث بری را پوشش خواهیم داد ، بنابراین در حال حاضر از ورود به جزئیات ارث بری خودداری خواهیم کرد.

سطح دسترسی پیش فرض

اگر سطح دسترسی را مشخص نکنیم ، سطح دسترسی پیش فرض را استفاده کرده ایم. سطح دسترسی پیش فرض مشابه protected است. سطح دسترسی پیش فرض فقط به اعضای داخل همان پکیج امکان دسترسی می دهد. ولی سطح دسترسی protected علاوه بر همان پکیج به کلاس های ارث بر از سایر پکیج ها هم امکان دسترسی می دهد. بنابراین ، می توان گفت که دسترسی پیش فرض محدودتر از دسترسی protected است. ما اشاره مختصری به نحوه ایجاد اعضای داده در یک کلاس کردیم. در جلسه بعدی ، به جزئیات بیشتر در مورد این موضوع خواهیم پرداخت.
class Cop {
  private int gun; // Private variable
  
  public int getGun(){
    return gun;  // The private variable is directly accessible over here!
  }
}
به اعضای public کلاس می توان از طریق عملگر نقطه دسترسی پیدا کرد. به عنوان مثال ، اگر یک شی c از نوع Cop داشته باشیم ، می توانیم به متد عمومی ()getGun اینگونه دسترسی پیدا کنیم:
Cop c = new Cop(); // Object created
c.getGun(); // Can access the gun
c.gun = 0; // This would cause an error since gun is private

سطح دسترسی Protected یا محافظت شده

دسته protected یا محافظت شده دسته ی خاصی است. سطح دسترسی اعضای protected جایی بین private (خصوصی) و public (عمومی) قرار دارد. کاربرد اصلی برچسب protected را می توان هنگام استفاده از وراثت ، که فرایند ایجاد کلاس هایی از کلاس های دیگر است ، یافت. پکیج برای مرتب کردن کد استفاده می شود و یک پکیج می تواند شامل چندین کلاس باشد. به اعضای protected یک کلاس می توان در داخل پکیج همان کلاس دسترسی داشت. ولی خارج از پکیج آن کلاس اعضای protected آن کلاس فقط از طریق کلاس های ارث برنده از آن کلاس قابل دسترسی هستند.
package justice;

public class Cop {
  private int gun;
  public int getGun(){
    return gun;  
  }
  protected void fire(){
    System.out.println("shoot!")
  }
}
package crime;  
import justice.*; 

class Thief{  
  public static void main(String args[]){  
   Cop obj = new Cop();  
   obj.fire(); //Compile Time Error  
  }  
}
کلاس Thief یک خطای زمان کامپایل ایجاد می کند زیرا در تلاش است به متد محافظت شده ()fire از کلاس Cop دسترسی پیدا کند که در پکیج دیگری تعریف شده است. همانطور که گفته شد یکی از کاربرد های سطح دسترسی protected مربوط به ارث بری کلاس ها است. ما بعداً مبحث ارث بری را پوشش خواهیم داد ، بنابراین در حال حاضر از ورود به جزئیات ارث بری خودداری خواهیم کرد.

سطح دسترسی پیش فرض

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

سطح دسترسی Public یا عمومی

این برچسب باعث می شود که کدهای درون دامنه شی (object scope) این کلاس بتوانند به عضو دارای این برچسب دسترسی مستقیم داشته باشند. به عبارت ساده تر هر جایی که به شی از این کلاس امکان دسترسی باشد به عضو public این شی نیز امکان دسترسی وجود دارد. متدهای عضو کلاس ها معمولاً public هستند زیرا متدها رابطی را فراهم می کنند که برنامه از طریق آن می تواند با اعضای private (خصوصی) کلاس ارتباط برقرار کند. اعضای Public (عمومی) را می توان با استفاده از کلمه کلیدی public مشخص کرد.

class Cop {
  private int gun; // Private variable
  
  public int getGun(){
    return gun;  // The private variable is directly accessible over here!
  }
}
به اعضای public کلاس می توان از طریق عملگر نقطه دسترسی پیدا کرد. به عنوان مثال ، اگر یک شی c از نوع Cop داشته باشیم ، می توانیم به متد عمومی ()getGun اینگونه دسترسی پیدا کنیم:
Cop c = new Cop(); // Object created
c.getGun(); // Can access the gun
c.gun = 0; // This would cause an error since gun is private

سطح دسترسی Protected یا محافظت شده

دسته protected یا محافظت شده دسته ی خاصی است. سطح دسترسی اعضای protected جایی بین private (خصوصی) و public (عمومی) قرار دارد. کاربرد اصلی برچسب protected را می توان هنگام استفاده از وراثت ، که فرایند ایجاد کلاس هایی از کلاس های دیگر است ، یافت. پکیج برای مرتب کردن کد استفاده می شود و یک پکیج می تواند شامل چندین کلاس باشد. به اعضای protected یک کلاس می توان در داخل پکیج همان کلاس دسترسی داشت. ولی خارج از پکیج آن کلاس اعضای protected آن کلاس فقط از طریق کلاس های ارث برنده از آن کلاس قابل دسترسی هستند.
package justice;

public class Cop {
  private int gun;
  public int getGun(){
    return gun;  
  }
  protected void fire(){
    System.out.println("shoot!")
  }
}
package crime;  
import justice.*; 

class Thief{  
  public static void main(String args[]){  
   Cop obj = new Cop();  
   obj.fire(); //Compile Time Error  
  }  
}
کلاس Thief یک خطای زمان کامپایل ایجاد می کند زیرا در تلاش است به متد محافظت شده ()fire از کلاس Cop دسترسی پیدا کند که در پکیج دیگری تعریف شده است. همانطور که گفته شد یکی از کاربرد های سطح دسترسی protected مربوط به ارث بری کلاس ها است. ما بعداً مبحث ارث بری را پوشش خواهیم داد ، بنابراین در حال حاضر از ورود به جزئیات ارث بری خودداری خواهیم کرد.

سطح دسترسی پیش فرض

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

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا