سطح دسترسی 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 آن دسترسی یافت.