Kotlin可见性修饰符–公共,受保护,内部,私有

时间:2020-02-23 14:37:32  来源:igfitidea点击:

在本教程中,我们将讨论Kotlin编程中可用的各种Visibility Modifiers。

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

以上所有声明均位于文件的顶层。
所有都是公开的。
如果我们不提及类成员的声明,则它们是公开的(除非它们被覆盖)。

保护修饰符

Kotlin中的保护修饰符:不能在顶级声明中设置。
在类中受保护的声明只能在其子类中访问。

open class Pr{
  protected val i = 0
}

class Another : Pr{

  fun iValue() : Int
  {
      return i
  }
}

不是Pr的子类的类不能访问i

除非您明确更改,否则被覆盖的受保护声明在子类中将具有相同的protected修饰符。

open class Pr{
  open protected val i = 0
}

class Another : Pr(){

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

上面定义的Kotlin中的保护修饰符概念不同于Java中的概念。

内部修饰符

Internal是Kotlin中可用的新修饰符,而Java中没有。
将声明设置为内部意味着它只能在同一模块中使用。
所谓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尚不存在。