- Kotlin 教程
- Kotlin - 首頁
- Kotlin - 概述
- Kotlin - 環境設定
- Kotlin - 架構
- Kotlin - 基本語法
- Kotlin - 註釋
- Kotlin - 關鍵字
- Kotlin - 變數
- Kotlin - 資料型別
- Kotlin - 運算子
- Kotlin - 布林值
- Kotlin - 字串
- Kotlin - 陣列
- Kotlin - 範圍
- Kotlin - 函式
- Kotlin 控制流
- Kotlin - 控制流
- Kotlin - if...Else 表示式
- Kotlin - When 表示式
- Kotlin - For 迴圈
- Kotlin - While 迴圈
- Kotlin - Break 和 Continue
- Kotlin 集合
- Kotlin - 集合
- Kotlin - 列表
- Kotlin - 集合
- Kotlin - 對映
- Kotlin 物件和類
- Kotlin - 類和物件
- Kotlin - 建構函式
- Kotlin - 繼承
- Kotlin - 抽象類
- Kotlin - 介面
- Kotlin - 可見性控制
- Kotlin - 擴充套件
- Kotlin - 資料類
- Kotlin - 密封類
- Kotlin - 泛型
- Kotlin - 委託
- Kotlin - 解構宣告
- Kotlin - 異常處理
- Kotlin 有用資源
- Kotlin - 快速指南
- Kotlin - 有用資源
- Kotlin - 討論
Kotlin - 可見性控制(修飾符)
Kotlin 的可見性修飾符是用於設定類、物件、介面、建構函式、函式以及屬性及其設定器可見性的關鍵字。儘管 getter 始終與其屬性具有相同的可見性,因此我們無法設定其可見性。
Setter 是用於設定屬性值的函式,而 getter 是用於獲取這些屬性值的函式。
Kotlin 中有四個可見性修飾符
public
private
protected
internal
預設可見性為 public。這些修飾符可以在多個位置使用,例如類頭或方法體。讓我們詳細瞭解這些修飾符。
Public 修飾符
Public 修飾符可在專案工作區的任何位置訪問。如果未指定訪問修飾符,則預設情況下它將處於 public 範圍。在我們之前的所有示例中,我們都沒有提及任何修飾符,因此,它們都處於 public 範圍。以下是一個示例,用於更深入地瞭解如何宣告 public 變數或方法。
class publicExample {
val i = 1
fun doSomething() {
}
}
在上面的示例中,我們沒有提及任何修飾符,因此此處定義的方法和變數預設情況下為 public。雖然上面的示例可以使用 **public** 修飾符顯式地編寫如下
public class publicExample {
public val i = 1
public fun doSomething() {
}
}
Private 修飾符
類、方法、包和其他屬性可以使用 **private** 修飾符宣告。此修飾符與 public 的含義幾乎完全相反,這意味著私有成員無法在其範圍之外訪問。一旦任何內容被宣告為 private,則只能在其直接範圍內訪問。例如,私有包可以在該特定檔案中訪問。私有類或介面只能由其資料成員訪問,等等。
private class privateExample {
private val i = 1
private val doSomething() {
}
}
在上面的示例中,類 **privateExample** 只能從同一個原始檔中訪問,變數 **i** 和方法 **doSomething** 只能從 privateExample 類內部訪問。
示例
讓我們檢查一個簡單的示例,展示私有成員的使用。
open class A() {
private val i = 1
fun doSomething(){
println("Inside doSomething" )
println("Value of i is $i" )
}
}
class B : A() {
fun printValue(){
doSomething()
// println("Value of i is $i" )
}
}
fun main(args: Array<String>) {
val a = A()
val b = B()
b.printValue()
}
執行上面的 Kotlin 程式時,將生成以下輸出
Inside doSomething Value of i is 1
在這裡,我們無法訪問類 B 內部的變數 **i**,因為它已定義為 private,這意味著它只能在類本身內部訪問,其他地方無法訪問。
Protected 修飾符
Protected 是 Kotlin 的另一個訪問修飾符,目前不適用於頂級宣告,例如任何包都不能是 protected。受保護的類或介面或屬性或函式僅對其自身及其子類可見。
package one;
class A() {
protected val i = 1
}
class B : A() {
fun getValue() : Int {
return i
}
}
在上面的示例中,變數 **i** 宣告為 protected,因此,它僅對類本身及其子類可見。
示例
讓我們檢查一個簡單的示例,展示受保護成員的使用。
open class A() {
protected val i = 1
protected fun doSomething(){
println("Inside doSomething" )
println("Value of i is $i" )
}
}
class B : A() {
fun printValue(){
doSomething()
println("Value of i is $i" )
}
}
fun main(args: Array<String>) {
val a = A()
val b = B()
//a.doSomething()
b.printValue()
}
執行上面的 Kotlin 程式時,將生成以下輸出
Inside doSomething Value of i is 1 Value of i is 1
在這裡,我們甚至無法使用 A 類的物件呼叫 **doSomething()**,因為它已定義為 protected,這意味著它只能在類本身或其子類中訪問。
Internal 修飾符
Internal 是 Kotlin 中新新增的修飾符。如果任何內容被標記為 internal,則該特定欄位將被標記為 internal 欄位。Internal 包僅在其實現的模組內可見。Internal 類介面僅由同一包或模組內的其他類可見。在下面的示例中,我們將看到如何實現 internal 方法。
package one
internal class InternalExample {
}
class publicExample{
internal val i = 1
internal fun doSomething() {
}
}
在上面的示例中,類 **InternalExample** 只能從同一個模組內部訪問,類似地,變數 **i** 和函式 **doSomething()** 也只能從同一個模組內部訪問,即使類 **publicExample** 可以從任何地方訪問,因為此類預設具有 **public** 可見性。
示例
讓我們檢查一個簡單的示例,展示 internal 成員的使用。
package com.tutorialspoint.modifiers
open class A() {
internal val i = 1
internal fun doSomething(){
println("Inside doSomething" )
println("Value of i is $i" )
}
}
class B : A() {
fun printValue(){
doSomething()
println("Value of i is $i" )
}
}
fun main(args: Array<String>) {
val a = A()
val b = B()
a.doSomething()
b.printValue()
}
執行上面的 Kotlin 程式時,將生成以下輸出
Inside doSomething Value of i is 1 Inside doSomething Value of i is 1 Value of i is 1
測驗時間 (面試 & 考試準備)
答案:C
解釋
Abstract 不是 Kotlin 中的可見性修飾符,儘管它用於定義抽象類。
Q 2 - 關於 protected 可見性修飾符,哪個說法正確?
答案:D
解釋
是的,受保護的成員只能被其類或子類訪問,這是正確的。