Kotlin 可见性修饰符 – public、protected、internal、private

在本教程中,我们将讨论 Kotlin 编程语言中可用的各种可见性修饰符。

Kotlin 可见性修饰符

可见性修饰符是附加到 Kotlin 中的类/接口/属性/函数的修饰符,用于定义它在何处可见以及从何处可以访问。Kotlin 中属性的设置器可以具有与属性不同的修饰符。获取器不能有可见性修饰符。它们使用与属性相同的修饰符。以下是可见性修饰符:

  • public
  • protected
  • internal
  • private

Public 修饰符

A Public Modifier is the default modifier in Kotlin. Just like the Java public modifier, it means that the declaration is visible everywhere.


class Hello{
}

public class H{
}

fun hi()
public fun hello()

val i = 0
public val j = 5

以上声明都在文件的顶层。全部都是公共的。如果我们不提及类成员的声明,它们将是公共的(除非被覆盖)。

Protected 修饰符

A Protected Modifier in Kotlin: CANNOT be set on top-level declarations. Declarations that are protected in a class, can be accessed only in their subclasses.

open class Pr{
    protected val i = 0
}

class Another : Pr{

    fun iValue() : Int
    {
        return i
    }
}

非Pr的子类无法访问i,被保护的声明在子类中被重写时会具有相同的受保护修饰符,除非您明确更改它们。

open class Pr{
    open protected val i = 0
}

class Another : Pr(){

    fun iValue() : Int
    {
        return i
    }
    
    override val i = 5 //protected visibility
}

上述定义的Kotlin中的Protected修饰符的概念与Java中的不同。

内部修饰符

Internal是Kotlin中的一个新修饰符,Java中没有这个修饰符。将声明设置为internal意味着它仅在同一模块中可用。在Kotlin中,模块指的是一组编译在一起的文件。

internal class A {
}

internal val x = 0

这些声明在当前模块外部将不可见。内部修饰符在需要隐藏特定库实现时很有用。在Java中,使用包私有可见性是不可能的。

私有修饰符

私有修饰符不允许声明在当前范围之外可见。

var setterVisibility: String = "abc"
private set

open class Pr{
    open protected val i = 0

    fun iValue() : Int
    {
        setterVisibility = 10
        return setterVisibility
    }
}

由于Kotlin允许多个顶级定义,上面的代码可以工作。下面的则不行。

private open class ABC{
    private val x = 6
}

private class BDE : ABC()
{
    fun getX()
    {
        return x //x cannot be accessed here.
    }
}

x is visibile only from inside its class. We can set private constructors in the following way:

class PRIV private constructor(a: String) {
 ... 
}

默认情况下,类具有公共构造函数。 无论类在何处,构造函数都会跟随其后。 我们需要在定义本身上设置构造函数的可见性修饰符。 因此,Kotlin 与 Java 在使用受保护和内部修饰符方面有所不同。 此外,Java 的默认修饰符是包私有的,在 Kotlin 中不存在。 这就结束了有关 Kotlin 中可见性修饰符的快速教程。

Source:
https://www.digitalocean.com/community/tutorials/kotlin-visibility-modifiers-public-protected-internal-private