Kotlin可见性修饰符 – 公共的、受保护的、内部的、私有的
在本教程中,我们将讨论Kotlin编程中可用的各种可见性修饰符。
Kotlin的可见性修饰符
可见性修饰符是一种修饰符,当附加到Kotlin中的类/接口/属性/函数上时,将定义其可见性范围以及可以从哪里进行访问。 Kotlin中的属性的设置器可以具有不同于属性的修饰符。获取器无法定义可见性修饰符。它们使用与属性相同的修饰符。以下是可见性修饰符:
- public
- protected
- internal
- private
公共修饰符
在Kotlin中,公有修饰符是默认的修饰符。就像Java中的公有修饰符一样,它意味着声明在任何地方都是可见的。
class Hello{
}
public class H{
}
fun hi()
public fun hello()
val i = 0
public val j = 5
以上的声明都在文件的顶层。所有声明都是公共的。如果我们没有提到类成员的声明,它们默认是公共的(除非它们被覆盖)。
受保护的修饰符 de
Kotlin中的受保护修饰符:无法用于顶层声明。在一个类中受保护的声明只能在其子类中访问。
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 Modifiers概念与Java中的不同。
内部修饰
在Kotlin中,internal是一种新的修饰符,而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。我们可以用以下方式设置私有构造函数:
class PRIV private constructor(a: String) {
...
}
默认情况下,类具有公共的构造函数。无论类去哪里,构造函数都会跟随。我们需要在定义本身上设置构造函数的可见性修饰符。因此,Kotlin与Java不同地使用了protected和internal修饰符。另外,Java的默认修饰符是package-private,在Kotlin中不存在。这就结束了有关Kotlin可见性修饰符的快速教程。