سطح دسترسی Protect
سطح دسترسی protect اجازه میدهد که اعضای کلاس، فقط در کلاسهای مشتق شده از کلاس پایه قابل دسترسی باشند. بدیهی است که خود کلاس پایه هم میتواند به این اعضا دسترسی داشته باشد. کلاسهایی که از کلاس پایه ارث بری نکردهاند نمیتوانند به اعضای با سطح دسترسی protect یابند. در مورد سطوح دسترسی public و private قبلاً توضیح دادیم. در جدول زیر نحوه دسترسی به سه سطح ذکر شده نشان داده شده است :
قابل دسترسی در | public | private | protected |
داخل کلاس |
true |
true |
true |
خارج از کلاس |
true |
false |
false |
کلاس مشتق |
true |
false |
true |
مشاهده میکنید که public بیشترین سطح دسترسی را داراست. صرف نظر از مکان، اعضای public در هر جا فراخوانی میشوند و قابل دسترسی هستند. اعضای private فقط در داخل کلاسی که به آن تعلق دارند قابل دسترسی هستند. کد زیر رفتار اعضای دارای این سه سطح دسترسی را نشان میدهد :
1: package myfirstprogram; 2: 3: class Parent 4: { 5: protected int protectedMember = 10; 6: private int privateMember = 10; 7: public int publicMember = 10; 8: } 9: 10: class Child extends Parent 11: { 12: public Child() 13: { 14: protectedMember = 100; 15: privateMember = 100; 16: publicMember = 100; 17: } 18: } 19: 20: public class MyFirstProgram 21: { 22: public static void main(String[] args) 23: { 24: Parent myParent = new Parent(); 25: 26: myParent.protectedMember = 100; 27: myParent.privateMember = 100; 28: myParent.publicMember = 100; 29: } 30: }
کدهایی که با خط قرمز نشان داده شدهاند نشان دهنده وجود خطا هستند چون آنها اجازه دسترسی به فیلدهای protect کلاس Parent را ندارند. همانطور که در خط 15 مشاهده میکنید کلاس Child سعی میکند که به عضو private کلاس Parent دسترسی یابد. از آنجاییکه اعضای private در خارج از کلاس قابل دسترسی نیستند، حتی کلاس مشتق در خط 15 نیز ایجاد خطا میکند. اگر شما به خط 14 توجه کنید کلاس Child میتواند به عضو protect کلاس Parent دسترسی یابد چون کلاس Child از کلاس Parent مشتق شده است.
حال به خط 26 جاییکه میخواهیم در کلاس MyFirstProgram به فیلد protect کلاس Parent دسترسی یابیم نگاهی بیندازید. میبینید که برنامه پیغام خطا میدهد چون کلاس MyFirstProgram از کلاس Parent مشتق نشده است. همچنین کلاس MyFirstProgram به اعضای private کلاس Parent نیز نمیتواند دسترسی یابد.
عالی بود
سلام.در مورد protected باید اینو بگم که در داخل پکیج هم می تونه مورد استفاده قرار بگیره.