جلسه هفتم : سطح دسترسی و تابع سازنده
همان طور که در پستهایی قبلی دیدید اگر یک عضو کلاسی را با توصیفگرpublic توصیف می کنیم ، آن عضو توسط هر کد دیگری در برنامه قابل دسترسی خواهد بود .
اعضای private فقط توسط اعضای کلاس و یا کلاسها دقیقاً بیان شده (friend) قابل دسترسی هستند.گاهی می خواهید دسترسی به اعضائ داده ای یک کلاس را محدود نمایید و فقط از طریق برخی روشها امکان پذیر سازید . همچنین ، شرایطی وجود دارند که مایلید روشهایی را که برای یک کلاس اختصاصی هستند ، تعریف نمایید
وقتی یک فیلد یا متدی به صورت private تعریف میشود به این معناست که آن فیلد یا متد فقط در محدوده آن کلاس قابل استفاده یا فراخوانی است بدین ترتیب اگر بخواهیم یک فیلد یا متد که به صورت private تعریف شده است را از خارج کلاس مقدار دهی کنیم با خطای کامپایل مواجه خواهیم شد مثلا کلاس زیر را در نظر بگیرید :
public class Time {
private int hour;
private int minute;
private int second;
public void set time(int h,int m,int s){
hour =(h>=0 && h<24)? h:0;
minute =(m>=0 && s<60)? m:0;
second =(s>=0 && s<60)? s:0;
}
}
اگر کد زیر را در کلاس Test tim به صورت زیر بزنید
time now =new Time()
now.hour=5;
خطای کامپایل تولید خواهد کرد زیرا hour به صورت private تعریف شده و نمی توان آنرا از بیرون آبجکت مقدار دهی کرد
تابع سازنده :
چنانچه بخواهیم به طور خلاصه بگوییم که Constructor چیست، بایستی گفت که یک Constructor همانند یک متد است با این تفاوت که نام آن دقیقاً با نام کلاس یکی بوده و از سوی دیگر به هیچ وجه نمی تواند داده ای را return کند . واقعیت دیگری که در مورد Constructor ها صدق می کند این است که یک Constructor می تواند هیچ پارامتری نداشته باشند، یک پارامتر داشته و یا حتی بیش از یک پارامتر داشته باشد.
معمولا بعضی از اعضای کلاس قبل از استفاده نیاز به مقداردهی دارند. اين عمل توسط سازنده (constructor) انجام می گیرد که به شیء اين امکان را می دهد که هنگام ايجاد مقداردهی شود. سازنده تابعی است هم اسم کلاس که وقتی یک نمونه از کلاس گرفته می شود اتوماتیک فراخوانی می شود.
تابع سازنده می تواند که پارامتر داشته باشد زمان ايجاد شیء می توان به متغيرهای عضو مقادير اوليه داد. برای ارسال آرگومان به تابع سازنده بايد هنگام تعريف شیء مقدار آرگومان بعد از نام شیء درون پرانتز قرار گيرد.
یک کلاس می تواند دارای چند سازنده با پارامترهای مختلف باشد. بهتر است همیشه حداقل یک سازنده حتی اگر خالی باشد ساخته شود.
کلاس Tim بالا را بیاد بیاورید اگر برای آن یک constructor بسازیم
public Time(int h, int m, int s){
hour =h;
minute=m;
second=s;
}
به محض یک شی از آن بسازیم آن مقدار دهی میشو البته باید h, m, s را به صورت آرگومان در هنگام new کردن کلاس بفرستیم
آموزش جامع جاوا