سطح دسترسی Protect
سطح دسترسی protect اجازه میدهد که اعضای کلاس، فقط در کلاسهای مشتق شده از کلاس پایه قابل دسترسی باشند. بدیهی است که خود کلاس پایه هم میتواند به این اعضا دسترسی داشته باشد. کلاسهایی که از کلاس پایه ارث بری نکردهاند نمیتوانند به اعضای با سطح دسترسی protect یابند. در مورد سطوح دسترسی public و private قبلاً توضیح دادیم. در جدول زیر نحوه دسترسی به سه سطح ذکر شده نشان داده شده است :
قابل دسترسی در | public | private | protected |
داخل کلاس |
true |
true |
true |
خارج از کلاس |
true |
false |
false |
کلاس مشتق |
true |
false |
true |
مشاهده میکنید که public بیشترین سطح دسترسی را داراست. صرف نظر از مکان، اعضای public در هر جا فراخوانی میشوند و قابل دسترسی هستند. اعضای private فقط در داخل کلاسی که به آن تعلق دارند قابل دسترسی هستند. کد زیر رفتار اعضای دارای این سه سطح دسترسی را نشان میدهد :
1: open class Parent 2: { 3: protected var protectedMember = 10 4: private var privateMember = 10 5: var publicMember = 10 6: } 7: 8: class Child : Parent() 9: { 10: init 11: { 12: protectedMember = 100 13: privateMember = 100 14: publicMember = 100 15: } 16: } 17: 18: fun main(args: Array<String>) 19: { 20: val myParent = Parent() 21: 22: myParent.protectedMember = 100 23: myParent.privateMember = 100 24: myParent.publicMember = 100 25: }
کدهایی که با خط قرمز نشان داده شدهاند نشان دهنده وجود خطا هستند چون آنها اجازه دسترسی به فیلدهای protect کلاس Parent را ندارند. همانطور که در خط 13 مشاهده میکنید کلاس Child سعی میکند که به عضو private کلاس Parent دسترسی یابد. از آنجاییکه اعضای private در خارج از کلاس قابل دسترسی نیستند، حتی کلاس مشتق در خط 13 نیز ایجاد خطا میکند. اگر شما به خط 12 توجه کنید کلاس Child میتواند به عضو protect کلاس Parent دسترسی یابد چون کلاس Child از کلاس Parent مشتق شده است.
حال به خط 22 جاییکه میخواهیم به فیلد protect کلاس Parent دسترسی یابیم نگاهی بیندازید. میبینید که برنامه پیغام خطا میدهد چون کلاس در خارج از کلاس Parent نمیتوان به اعضای protect و private آن دسترسی یافت.