Kotlin可見性修飾符

Kotlin中的可見性修飾符是用於限制應用程序中的類,接口,方法和屬性使用的關鍵字。 這些修飾符用於多個位置,例如:類聲明或方法體。

在Kotlin中,可見性修飾符分爲四種不同的類型:

  • public
  • protected
  • internal
  • private

1. public 修飾符

可以從項目的任何位置訪問public修飾符。 它是Kotlin中的默認修飾符。 如果沒有使用任何訪問修飾符指定任何類,接口等,則在public範圍中使用。

public class Example{
}
class Demo{
}
public fun hello()
fun demo()
public val x = 5
val y = 10

所有public聲明都可以放在文件的頂部。 如果未指定類的成員,則默認爲public

2. protected 修飾符

類或接口使用protected修飾符僅允許對其類或子類進行可見性。 除非明確更改,否則子類中的protected聲明在被重寫時也是protected修飾符。

open class Base{  
    protected val i = 0  
}  

class Derived : Base(){  

    fun getValue() : Int  
    {  
        return i  
    }  
}

在Kotlin中,protected修飾符不能在頂層聲明。

覆蓋protected的類型

open class Base{  
  open protected val i = 5  
}  
class Another : Base(){  
    fun getValue() : Int  
    {  
        return i  
    }  
    override val i =10  
}

3. internal 修飾符

internal修飾符是在Kotlin中新添加的,它在Java中不可用。 聲明要將字段標記爲internal字段。internal修飾符使字段僅在實現它的模塊內可見。

internal class Example{  
    internal val x = 5  
    internal fun getValue(){  

    }  
}  
internal val y = 10

在上面,所有字段都聲明爲internal,只能在實現它們的模塊內部訪問。

4. private 修飾符

private修飾符允許聲明僅在聲明屬性,字段等的塊內可訪問。 private修飾符聲明不允許訪問範圍外部。可以在該特定文件中訪問私有包。

private class Example {  
    private val x = 1  
     private valdoSomething() {  
    }  
}

在上面的類示例中,val x和函數doSomthing()聲明爲private。 可以從同一個源文件訪問類Example,可以在Example類中訪問val xfun doSomthing()

可見性修飾符示例

open class Base() {
    var a = 1 // 默認爲 public 
    private var b = 2 // 基類 private 
    protected open val c = 3  // Base和Derived類可見
    internal val d = 4 // 在同一個模塊中可見
    protected fun e() { } // Base和Derived類可見
}

class Derived: Base() {
    // a, c, d, 和 e() 基類可見
    // b 是不可見
    override val c = 9 // c 爲 protected
}

fun main(args: Array<String>) {
    val base = Base()
    // base.a 和 base.d 可見
    // base.b, base.c 和 base.e() 不可見
    val derived = Derived()
    // derived.c 不可見
}