سطح دسترسی

سطح دسترسی یا Access Modifier، مشخص می‌کند که متدها و فیلدهای یک کلاس، در چه جای برنامه قابل دسترسی هستند. در این درس می‌خواهیم به سطح دسترسی private و public نگاهی بیندازیم. سطح دسترسی public زمانی مورد استفاده قرار می‌گیرد که شما بخواهید به یک متد یا فیلد در خارج از کلاس و حتی پروژه دسترسی یابید. به عنوان مثال به کد زیر توجه کنید :

   1: package myfirstprogram;
   2: 
   3: class Test
   4: {
   5:     public int number;
   6: }
   7: 
   8: public class MyFirstProgram 
   9: {     
  10:     public static void main(String[] args) 
  11:     {         
  12:        Test x = new Test();
  13: 
  14:        x.number = 10; 
  15:     }   
  16: }

در این مثال یک کلاس به نام Test تعریف کرده‌ایم (خطوط 6-3). سپس یک فیلد یا عضو داده‌ای به صورت public در داخل کلاس Test تعریف می‌کنیم (خط 5). با تعریف این عضو به صورت public می‌توانیم آن را در خارج از کلاس Test و در داخل متد ()main کلاس MyFirstProgram مقدار دهی کنیم. حال سطح دسترسی public را به private تغییر می‌دهیم :

   1: package myfirstprogram;
   2: 
   3: class Test
   4: {
   5:     private int number;
   6: }
   7: 
   8: public class MyFirstProgram 
   9: {     
  10:     public static void main(String[] args) 
  11:     {         
  12:        Test x = new Test();
  13: 
  14:         x.number = 10; 
  15:     }   
  16: }

همانطور که در مثال بالا مشاهده می‌کنید این بار از کلمه private در تعریف فیلد number استفاده کرده‌ایم (خط 5). وقتی که برنامه را کامپایل می‌کنیم با حطا مواجه می‌شویم چون number در داخل کلاس MyFirstProgram و یا هر کلاس دیگر قابل دسترسی نیست.

نکته دیگر اینکه اگر شما برای یک کلاس سطح دسترسی تعریف نکنید آن کلاس دارای سطح دسترسی داخلی (default modifier) می‌شود به این معنی که فقط کلاس‌های داخل پروژه‌ای که با آن کار می‌کنید و می‌توانند به آن کلاس دسترسی یابند. اگر یک کلاس را به صورت public و اعضای آن را به صورت private تعریف کنیم، آنگاه می‌توان یک نمونه از کلاس را در داخل کلاس‌های دیگر ایجاد کرد ولی اعضای آن قابل دسترسی نیستند. اعضایی که دارای سطح دسترسی private فقط در داخل کلاس Test قابل دسترسی هستند :

   1: package myfirstprogram;
   2: 
   3: public class Test
   4: {
   5:     private int number;
   6: }
   7: 
   8: public class MyFirstProgram 
   9: {     
  10:     public static void main(String[] args) 
  11:     {         
  12:        Test x = new Test();
  13: 
  14:         x.number = 10; 
  15:     }   
  16: }

کد بالا کامپایل نمی‌شود، چون جاوا به شما اجازه استفاده از دو کلاس عمومی در یک فایل را نمی‌دهد. برای حل این مشکل یا باید کلمه public را مثلاً از ابتدای کلاس Test حذف کنیم و یا اینکه چون ما می‌خواهیم حتماً کلاس به صورت public تعریف شود و اعضای آن به صورت private آن را باید در یک فایل جدا به صورت زیر تعریف و با پسوند java. تعریف کنیم :

همانطور که در شکل بالا و پایین مشاهده می‌کنید باید دو کلاس در داخل یک Package باشند :

حال اگر از کلاس Test در کلاس MyFirstProgram نمونه‌ای ایجاد کرده و بخواهیم از فیلد number استفاده کنیم با خطا مواجه می‌شویم، چون که اعضای با سطح دسترسی private در خارج از کلاسی که به آن تعلق دارند، غیر قابل دسترس هستند :

package myfirstprogram;

public class MyFirstProgram 
{     
    public static void main(String[] args) 
    {         
       Test x = new Test();

        x.number = 10; 
    }   
}

سطوح دسترسی دیگری هم در جاوا وجود دارد که بعد از مبحث وراثت در درسهای آینده در مورد آنها توضیح خواهیم داد.