Scala - Công cụ sửa đổi quyền truy cập

Chương này sẽ đưa bạn qua các công cụ sửa đổi quyền truy cập Scala. Các thành viên của gói, lớp hoặc đối tượng có thể được gắn nhãn với các bổ trợ truy cập là riêng tư và được bảo vệ, và nếu chúng ta không sử dụng một trong hai từ khóa này, thì quyền truy cập sẽ được coi là công khai. Các sửa đổi này hạn chế quyền truy cập của các thành viên vào một số vùng mã nhất định. Để sử dụng một công cụ sửa đổi quyền truy cập, bạn đưa từ khóa của nó vào định nghĩa về các thành viên của gói, lớp hoặc đối tượng như chúng ta sẽ thấy trong phần sau.

Thành viên riêng

Thành viên riêng chỉ hiển thị bên trong lớp hoặc đối tượng có chứa định nghĩa thành viên.

Sau đây là đoạn mã ví dụ để giải thích thành viên Riêng tư -

Thí dụ

class Outer {
   class Inner {
      private def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

Trong Scala, quyền truy cập (Nội tại mới). f () là bất hợp pháp vì f được khai báo là private trong Inner và quyền truy cập không phải từ bên trong lớp Inner. Ngược lại, quyền truy cập đầu tiên đến f trong lớp Trong cùng là OK, vì quyền truy cập đó được chứa trong phần thân của lớp Bên trong. Java sẽ cho phép cả hai quyền truy cập vì nó cho phép một lớp bên ngoài truy cập vào các thành viên riêng của các lớp bên trong của nó.

Thành viên được bảo vệ

Một thành viên được bảo vệ chỉ có thể truy cập được từ các lớp con của lớp mà thành viên đó được xác định.

Sau đây là đoạn mã ví dụ để giải thích thành viên được bảo vệ -

Thí dụ

package p {
   class Super {
      protected def f() { println("f") }
   }
   
   class Sub extends Super {
      f()
   }
   
   class Other {
      (new Super).f() // Error: f is not accessible
   }
}

Việc truy cập vào f trong lớp Sub là OK vì f được khai báo là bảo vệ trong lớp 'Super' và lớp 'Sub' là một lớp con của Super. Ngược lại, quyền truy cập vào f trong lớp 'Khác' không được phép, vì lớp 'Khác' không kế thừa từ lớp 'Super'. Trong Java, quyền truy cập sau này sẽ vẫn được phép vì lớp 'Other' nằm trong cùng một gói với lớp 'Sub'.

Thành viên công khai

Không giống như các thành viên riêng tư và được bảo vệ, không bắt buộc phải chỉ định từ khóa Public cho các thành viên Public. Không có công cụ sửa đổi rõ ràng cho các thành viên công khai. Các thành viên như vậy có thể được truy cập từ mọi nơi.

Sau đây là đoạn mã ví dụ để giải thích về thành viên công khai -

Thí dụ

class Outer {
   class Inner {
      def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // OK because now f() is public
}

Phạm vi bảo vệ

Các bộ sửa đổi quyền truy cập trong Scala có thể được bổ sung với các bộ định tính. Công cụ sửa đổi của biểu mẫu private [X] hoặc protected [X] có nghĩa là quyền truy cập là riêng tư hoặc được bảo vệ "tối đa" X, trong đó X chỉ định một số gói, lớp hoặc đối tượng singleton bao quanh.

Hãy xem xét ví dụ sau:

Thí dụ

package society {
   package professional {
      class Executive {
         private[professional] var workDetails = null
         private[society] var friends = null
         private[this] var secrets = null

         def help(another : Executive) {
            println(another.workDetails)
            println(another.secrets) //ERROR
         }
      }
   }
}

Note - những điểm sau từ ví dụ trên -

  • Biến workDetails sẽ có thể truy cập được đối với bất kỳ lớp nào trong gói chuyên nghiệp đi kèm.

  • Những người bạn khác nhau sẽ có thể truy cập vào bất kỳ tầng lớp nào trong xã hội gói bao quanh.

  • Các bí mật biến sẽ chỉ có thể truy cập được trên đối tượng ngầm bên trong các phương thức thể hiện (this).