آموزش تنظیم کنندگان سطح دسترسی در جاوا (به زبان ساده)
در این آموزش با انواع مختلف Access Modifier در جاوا و نحوه کار آن ها در سناریوهای مختلف آشنا می شوید.
Access Modifier چیست؟
تنظیم کنندگان سطح دسترسی کلمات کلیدی هستند که قابلیت دسترسی (میزان دسترسی) به کلاس ، اینترفیس ، متغیر ، عضو داده ، متد یا سازنده را تعیین می کنند. آنها همچنین به visibility modifier هم مشهور هستند.
با استفاده از تنظیم کنندگان سطح دسترسی، می توانید کد را کپسوله سازی کنید. به این معنی که می توان مشخص کرد چه بخشی از یک برنامه می تواند به اعضای یک کلاس دسترسی داشته باشد. بنابراین می توان از سوء استفاده از داده ها جلوگیری کرد.
انواع تنظیم کنندگان سطح دسترسی
تنظیم کنندگان سطح دسترسی در داخل پکیج
یک پکیج به سادگی یک ظرف است که انواع مختلف و مرتبط را جمع آوری می کند (کلاس های جاوا ، رابط ها ، شمارش و حاشیه نگاری).
چهار کلید واژه تنظیم کننده سطح دسترسی در جاوا وجود دارد که عبارتند از:
تمام تنظیم کننده های سطح دسترسی در زیر به تفصیل توضیح داده شده اند.
۱-سطح دسترسی Default
اگر تنظیم کننده سطح دسترسی صریحا برای یک کلاس ، متغیر ، متد یا سازنده مشخص نشده باشد، فرض بر این است که سطح دسترسی default است.
مثال ۱ : سطح دسترسی default تعریف کنید
- package defaultPackage;
- class Logger {
- void message(){
- System.out.println(“This is a message”);
- }
- }
در اینجا ، کلاس Logger سطح دسترسی deafult دارد و برای کلاس هایی که به پکیج defaultPackage تعلق دارند قابل دسترسی است. اگر کلاس Logger را در پکیج های مختلف وارد (import) و سعی کنید آن را معرفی کنید ، خطا دریافت خواهید کرد.
۲- سطح دسترسی private
فقط متد ها و اعضای داده ها را می توان private اعلام کرد ، در حالی که کلاس ها یا رابط ها نمی توانند private اعلام شوند. با این حال ، کلاس های درونی در کلاس تو در تو می توانند private اعلام شوند.
اگر متد های دریافت کننده public در کلاس وجود داشته باشد ، می توانید به متغیرهای private در خارج از کلاس دسترسی پیدا کنید.
مثال ۲ : سطح دسترسی private تعریف کنید
- public class Data {
- private String name;
- public String getName() {
- return this.name;
- }
- public void setName(String name) {
- this.format = name;
- }
- }
- public class Main {
- Public static void main(String[] main){
- Data d = new Data();
- d.setName(“Programiz”);
- System.out.println(d.getName());
- }
- }
جاوا، جاوا اسکریپت رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، پولسازی عالی با توسعه وب، ماشین لرنینگ و ... کتابخانه های پیشرفته جاوا اسکریپت و ... دانلود:
خروجی
Programiz
در اینجا ، name یک متغیر private است و فقط در داخل کلاس Data قابل دسترسی است. اما ، با کمک متد های دریافت کننده public ، می توان در کلاس Main به آن دسترسی پیدا کرد.
۳- سطح دسترسی protected
سطح دسترسی protected در همان پکیج و همچنین کلاس هایی که مستقیما sub class کلاس پایه شما هستند، دسترسی ایجاد می کنند. فقط متد ها و اعضای داده می توانند protected شوند ، در حالی که کلاس ها یا رابط ها نمی توانند protected شوند.
مثال ۳ : سطح دسترسی protected تعریف کنید
- // Logger.java
- package package1;
- public class Logger {
- protected void debug(String logLine){
- System.out.println(“Debug line: “+logLine);
- }
- }
- // Main.java
- package package2;
- import package1.Logger;
- public class Main extends Logger {
- public static void main(String [] args){
- Main logger = new Main();
- // invokes debug() from Logger class
- logger.debug(“hello from main”);
- }
- }
خروجی
Debug line: hello from main
مشاهده می کنید ، Logger.java و Main.java در پکیج های مختلف قرار دارند. متد ()debuge در کلاس Logger ، protected است و این متد فقط در داخل پکیج قابل دسترسی است. اما ، با این وجود ، در کلاس Main نیز قابل دسترسی است زیرا کلاس Main از کلاس Logger ارث بری می کند.
۴- سطح دسترسی public
سطح دسترسی public محدودیتی ندارد و می تواند در کلاس ها و رابط ها به همراه متدها ، اعضای داده و متغیرها اعمال شود.
مثال ۴ : سطح دسترسی public تعریف کنید
- // Logger.java
- public class Logger {
- public int debugLevel = 1;
- public void debug(String logLine){
- System.out.println(“Debug: “+logLine);
- }
- public void info(String logLine){
- System.out.println(“Info: “+logLine);
- }
- }
- // LoggerImp.java
- public class LoggerImp {
- public static void main( String[] args ) {
- Logger logger = new Logger();
- logger.debug(“debug with level ” + logger.debugLevel);
- logger.debugLevel = 5;
- logger.info(“info with level ” + logger.debugLevel);
- }
- }
خروجی
Debug: debug with level 1
Info: info with level 5
در اینجا ، در کلاس LoggerImp ، توانستید کلاس Logger را ایجاد کنید زیرا public است. متغیرها و متد های داخل کلاس LoggerImp نیز public هستند. از این رو ، قادر به استفاده مستقیم از آن در کلاس LoggerImp هستید.