Kotlin visibility modifiers
Class, object, interface, constructor, function, property(và function set() của nó) đều có visibility modifiers (hay thường gọi là access modifiers) .(function get() của property luôn có visibility modifier giống với property). Kotlin có 4 visibility modifiers: private, protected, internal và public. Nếu không xác định rõ ràng visibility modifier thì mặc định sẽ là public.
Packages
Function, property, class, object và interface đều có thể khai báo ở mức "top-level" (được hiểu là nó không ở bên trong bất cứ thành phần nào). Ví dụ như trong package (đại diện cho đường dẫn đến file):
Nếu không xác định rõ ràng visibility modifier thì mặc định sẽ là
public. Điều đó có nghĩa là bạn có thể sử dụng nó ở bất kì đâu.Nếu khai báo là
private, nó chỉ được sử dụng ở trong file mà nó khai báo.Nếu khai báo là
internal, nó chỉ được sử dụng ở các nơi cùngmodule.protectedkhông được sử dụng khi khai báo ở mức "top-level".
Ví dụ:
Classes và Interfaces
Đối với các thành phần khai báo ở trong Class:
privatechỉ được sử dụng trong class đó (không thể truy cập qua instance của class đó)protectedgiống vớiprivate+ có thể sử dụng ở trong các subclass (các class kế thừa nó).internalkhả năng truy cập rộng hơn 2 loại trên và được truy cập bởi các instance của class khai báo nó (các instance và nơi khai báo class thuộc cùng module)publicrộng nhất và được sử dụng ở bất kì đâu thông qua instance khai báo nó.
Ví dụ:
Constructors
Để xác định rõ visibility của primary constructor, sử dụng cú pháp dưới đây(chú ý khi xác định visibility phải sử dụng từ khóa constructor, bình thường không có visibility modifier hoặc annotation thì constructor có thể bỏ qua):
Mặc định các constructor là public.
Local declarations
Local variables, functions và class không có visibility modifier
Modules
internal visibility modifier có thể truy cập nếu cùng module. Chi tiết hơn thì module là một tập hợp các file Kotlin được complie cùng nhau như:
Intellij IDEA module
Maven hoặc Gradle project