Trong bài viết này, bạn sẽ tìm hiểu về tất cả 4 bộ điều chỉnh hiển thị/truy cập trong Kotlin và cách chúng hoạt động trong các tình huống khác nhau.
Bộ điều chỉnh hiển thị/ truy cập là các từ khóa thiết lập khả năng hiển thị (khả năng truy cập) của các class, đối tượng, interface, hàm tạo, hàm, thuộc tính và setters của chúng. (Chúng ta không thể thiết lập bộ điều chỉnh hiển thị của getters vì chúng luôn có khả năng hiển thị giống như thuộc tính.)
Trong bài viết về class và đối tượng trong Kotlin , bạn đã tìm hiểu một cách tóm tắt về các bộ điều chỉnh hiển thị/ truy cập với public và private. Trong bài viết này, bạn sẽ tìm hiểu thêm về hai bộ điều chỉnh hiển thị protected và internal (cũng như public và private) chi tiết.
Nội dung chính
1. Bộ điều chỉnh hiển thị bên trong gói
Một gói tổ chức một tập hợp các hàm, thuộc tính và các class, đối tượng và interface liên quan đến nhau. Hãy đọc về Gói trong Kotlin
Bộ điều chỉnh | Mô tả |
public | các khai báo có thể nhìn thấy ở khắp mọi nơi |
private | hiển thị bên trong tệp chứa khai báo |
internal | hiển thị bên trong cùng một mô-đun (một tập hợp các tệp trong Kotlin được biên dịch cùng nhau) |
protected | không có sẵn cho các gói (được sử dụng cho các subclass) |
Lưu ý: Nếu bộ điều chỉnh hiển thị không được chỉ định, thì theo mặc định sẽ là public.
Hãy lấy một ví dụ:
// file name: hello.kt
package test
fun function1() {} // public by default and visible everywhere
private fun function2() {} // visible inside hello.kt
internal fun function3() {} // visible inside the same module
var name = "Foo" // visible everywhere
get() = field // visible inside hello.kt (same as its property)
private set(value) { // visible inside hello.kt
field = value
}
private class class1 {} // visible inside hello.kt
2. Bộ điều chỉnh hiển thị bên trong các class và interface
Dưới đây là cách các bộ điều chỉnh hiển thị hoạt động cho các thành viên (hàm, thuộc tính) được khai báo bên trong một class:
Bộ điều chỉnh | Mô tả |
public | hiển thị cho bất kỳ khách hàng nào có thể thấy class khai báo |
private | chỉ hiển thị bên trong class |
protected | hiển thị bên trong class và các subclass của nó |
internal | hiển thị cho bất kỳ máy khách nào bên trong mô-đun có thể thấy class khai báo |
Lưu ý: Nếu bạn ghi đè một thành viên protected trong class dẫn xuất mà không chỉ định mức độ hiển thị của nó, khả năng hiển thị của nó cũng sẽ là protected.
Hãy lấy một ví dụ:
open class Base() {
var a = 1 // public by default
private var b = 2 // private to Base class
protected open val c = 3 // visible to the Base and the Derived class
internal val d = 4 // visible inside the same module
protected fun e() { } // visible to the Base and the Derived class
}
class Derived: Base() {
// a, c, d, and e() of the Base class are visible
// b is not visible
override val c = 9 // c is protected
}
fun main(args: Array<String>) {
val base = Base()
// base.a and base.d are visible
// base.b, base.c and base.e() are not visible
val derived = Derived()
// derived.c is not visible
}
3. Thay đổi mức độ hiển thị của một hàm tạo
Theo mặc định, khả năng hiển thị của một hàm tạo là public. Tuy nhiên, bạn có thể thay đổi nó. Để làm điều đó, bạn cần phải thêm từ khóa constructor rõ ràng.
Khả năng hiển thị mặc định của hàm tạo là public trong ví dụ dưới đây:
class Test(val a: Int) {
// code
}
Đây là cách bạn có thể thay đổi khả năng hiển thị của nó.
class Test private constructor(val a: Int) {
// code
}
Ở đây hàm tạo là private.
Lưu ý: Trong Kotlin, các hàm cục bộ, biến và class không thể có các bộ điều chỉnh hiển thị.
Full series tự học Kotlin từ cơ bản tới nâng cao.
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!