Kotlin——中级篇(三):可见性修饰符详解

Kotlin中,不论是类,对象,接口,构造函数,函数,属性及其设置器都具备可见性修饰符。Kotlin中的可见性修饰符共四种。即public、protected、private、internal。在不一样的场景声明不一样的修饰符都有不一样的可见性。下面详解介绍不一样的修饰符在不一样场景的范围。 这里值得注意的是,属性的Getter()函数的可见性具备与属性相同的可见性。git

目录

1、 四种修饰符的说明

  • public修饰符表示 公有 。此修饰符的范围最大。当不声明任何修饰符时,系统会默认使用此修饰符。
  • internal修饰符表示 模块 。对于模块的范围在下面会说明。
  • protected修饰符表示 私有+子类。值得注意的是,此修饰符不能用于顶层声明,在下面能够看到。
  • private修饰符表示 私有 。此修饰符的范围最小,便可见性范围最低。

2、在不一样场景下各个修饰符声明的范围讲解

对于可见性修饰符来讲,不论是Java仍是Kotlin,在不一样的场景下用可见性修饰符修饰过的变量、函数、属性等都有不一样的引用范围。github

2.一、在包(package)中声明,即顶层声明的状况

在顶层申明中分为下面两种状况:函数

  • 在同一个文件中访问的状况
  • 在不一样文件中访问的状况

2.1.一、测试同一个文件中声明不一样的修饰符的范围 测试

在同一个文件中的访问状况

2.1.二、测试不一样文件中声明不一样的修饰符的范围 code

在不一样文件中的访问状况

2.1.三、小结cdn

  • 在顶层状况下声明的变量、方法、类、接口等,不能使用protected修饰符。
  • public修饰符可省略,由于它是系统默认的。
  • 在同一文件下,用任意修饰符均可以访问,固然此处除开protected修饰符
  • 在不一样文件下,只能访问publicinternal修饰符修饰的变量、方法等
  • 上边只演示了在顶层声明方法的状况,不过声明其余的也是同样的。

2.二、在类(class)和接口(interface)中声明的状况

  • 在类中声明的状况和在接口中声明的状况是彻底不相同的。

2.2.一、测试在类中声明的状况 对象

在类中声明的状况

2.2.二、测试在接口中声明的状况 blog

在接口中声明的状况
使用在接口中声明的属性

2.2.三、小结接口

  • 在类中声明属性、方法等,可使用任意修饰符修饰。而且在类中的任意位置都能访问各个修饰符修饰的属性、方法等。
  • 在类外,只能访问由publicinternal修饰符修饰的属性、方法。此状况不论是不是在同一个文件中去操做。
  • 在接口中声明的状况下,只能由public修饰符修饰属性。方法可由publicprivate两个修饰符去修饰,可是,用private修饰符修饰符修饰的方法不能被实现该接口的类重写。
  • 为了使用接口中由public修饰符修饰的属性、方法等。只能定义一个类去实现该接口,而后重写其属性、方法。这样就能在可在类中或类外去操做。

2.三、在构造函数中声明的状况

构造函数中声明的状况

看过我前几遍文章的都知道在Kotlin中分为主构造函数,和副级或多级构造函数,固然在Java中也是存在的,只不过咱们更习惯称其为方法重载。对此还不甚清晰的,能够阅读个人上一篇文章Kotlin——中级篇(一):类(class)详解。 故而,当咱们在构造函数中声明的状况下,若是是主构造函数的时候,是和在类(class)中声明的状况是同样的。若是是主构造函数的时候,则是和在局部声明的状况是同样的。get

2.四、局部声明的状况

局部声明的状况

在局部声明的状况下,只能使用public修饰符修饰的变量。而且在变量只能在局部这个范围内使用,出了这个范围后就访问不到了。

3、与Java中的可见性修饰符的对比

  • Java中的可见性修饰符和Koltin中的可见性修饰符仍是颇有几点不一样之处的: 一、 四种修饰符的不一样。Koltin的四种修饰符(public、interna、protected、private),Java的的四种修饰符(public、protected、privavte、default(即不使用任何修饰符))。 二、默认修饰符的不一样。Kotlin的默认修饰符为publicJava的默认修饰符为default

4、总结

此节主要涉及的知识大部分是理论知识,上面分析了各个修饰符在每一种状况下的范围使用。这一节是很基础的东西,可是越是基础的东西越是容易忘记,甚至记得不清晰,各位能够好好看一下各类状况下的截图,上面写的非常清晰,而且对每一点下面都做了小结。

若是各位大佬看了以后感受还阔以,就请各位大佬随便star一下,您的关注是我最大的动力。
个人我的博客Jetictors
个人githubJetictors

欢迎各位大佬进群共同研究、探索

QQ群号:497071402

相关文章
相关标签/搜索