Kotlin可见性修饰符详解

目录
  • 一、 四种修饰符的说明
  • 二、在不同场景下各个修饰符声明的范围讲解
    • 2.1、在包(package)中声明,即顶层声明的情况
      • 2.1.1、测试同一个文件中声明不同的修饰符的范围
      • 2.1.2、测试不同文件中声明不同的修饰符的范围
      • 2.1.3、小结
    • 2.2、在类(class)和接口(interface)中声明的情况
      • 2.2.1、测试在类中声明的情况
      • 2.2.2、测试在接口中声明的情况
      • 2.2.3、小结
    • 2.3、在构造函数中声明的情况
    • 2.4、局部声明的情况
  • 三、与Java中的可见性修饰符的对比

一、 四种修饰符的说明

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

二、在不同场景下各个修饰符声明的范围讲解

对于可见性修饰符来说,不管是Java还是Kotlin,在不同的场景下用可见性修饰符修饰过的变量、函数、属性等都有不同的引用范围。

2.1、在包(package)中声明,即顶层声明的情况

在顶层申明中分为下面两种情况:

  1. 在同一个文件中访问的情况
  2. 在不同文件中访问的情况

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

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

2.1.2、测试不同文件中声明不同的修饰符的范围

在不同文件中的访问情况

2.1.3、小结

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

2.2、在类(class)和接口(interface)中声明的情况

在类中声明的情况和在接口中声明的情况是完全不相同的。

2.2.1、测试在类中声明的情况

在类中声明的情况

2.2.2、测试在接口中声明的情况

在接口中声明的情况

使用接口中声明的属性

2.2.3、小结

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

2.3、在构造函数中声明的情况

在Kotlin中分为主构造函数,和副级或多级构造函数,当然在Java中也是存在的,只不过我们更习惯称其为方法重载。)。
故而,当我们在构造函数中声明的情况下,如果是主构造函数的时候,是和在类(class)中声明的情况是一样的。如果是主构造函数的时候,则是和在局部声明的情况是一样的。

2.4、局部声明的情况

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

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

Java中的可见性修饰符和Koltin中的可见性修饰符还是很有几点不同之处的:

  1. 四种修饰符的不同。Koltin的四种修饰符(public、interna、protected、private),Java的的四种修饰符(public、protected、privavte、default(即不使用任何修饰符))。
  2. 默认修饰符的不同。Kotlin的默认修饰符为public,Java的默认修饰符为default。

到此这篇关于Kotlin可见性修饰符详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Kotlin入门学习教程之可见性修饰符

    目录 前言 1.包场景下的可见性修饰符 2.类内部声明的成员 总结 前言 在Kotlin中四种可见性修饰符:private.protected.internal.public,如果没有显示指定修饰符的话,默认可见性是public. 四种修饰符的说明 public修饰符表示 公有 .此修饰符的范围最大.当不声明任何修饰符时,系统会默认使用此修饰符. internal修饰符表示 模块 .对于模块的范围在下面会说明. protected修饰符表示 私有`+`子类.值得注意的是,此修饰符不能用于顶层声明

  • Kotlin可见性修饰符详解

    目录 一. 四种修饰符的说明 二.在不同场景下各个修饰符声明的范围讲解 2.1.在包(package)中声明,即顶层声明的情况 2.1.1.测试同一个文件中声明不同的修饰符的范围 2.1.2.测试不同文件中声明不同的修饰符的范围 2.1.3.小结 2.2.在类(class)和接口(interface)中声明的情况 2.2.1.测试在类中声明的情况 2.2.2.测试在接口中声明的情况 2.2.3.小结 2.3.在构造函数中声明的情况 2.4.局部声明的情况 三.与Java中的可见性修饰符的对比 一

  • Vue.js中 v-model 指令的修饰符详解

    1 .lazy v-model 指令默认会在 input 事件中加载输入框中的数据(中文输入法中输入拼音的过程除外).我们可以使用 .lazy 懒加载修饰符,让其只在 change 事件中再加载输入框中的数据. html: <div id="app"> <input type="text" v-model.lazy="content" placeholder="请输入" value="初始值&quo

  • java封装及四种权限修饰符详解

    1.对属性进行封装,使用户不能直接输入数据,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值.则需要将属性声明为私有的(private). 2.我们将类的属性私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值 封装性的体现,需要权限修饰符来配合 1.Java规定的4种权限(从小到大排列):private.缺省.protected .public 2.这4种权限可以用来修饰类及类的内部结构:属性.方法.构造器.内部

  • Vue.js学习笔记之修饰符详解

    本篇将简单介绍常用的修饰符. 在上一篇中,介绍了 v-model 和 v-on 简单用法.除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现.通常都是在指令后面用小数点"."连接修饰符名称. 一.v-model的修饰符 v-model 是用于在表单表单元素上创建双向数据绑定的指令.在 <input> 和 <textarea> 上,默认通过监听元素的 input 事件来更新绑定的属性值. 为了能明显的看到绑定属性值的变化,需要在Chrome浏览器中安

  • C++继承类成员访问权限修饰符详解

    目录 1. 前言 2. 不同修饰下的类成员被访问权限 3. 继承时的属性变化 4. protected的作用 总结 1. 前言 C++提供了三个修饰符来限定类成员的被访问权限,分别是public ,protected, private. 通过限定访问权限,可以达到程序编写者想要解决的安全问题和权限问题.这种权限的设置对于安全是非常必要的. 2. 不同修饰下的类成员被访问权限 public:被public修饰的类成员可以在任何地方被访问到. protected:被protected修饰的类成员可以

  • 关于protected修饰符详解-源于Cloneable接口

    目录 今天在做对象拷贝的时候发现一个问题 接下来按照我们的思路写代码实现 为什么应用了Cloneable接口的类 通常还必须重写一个public的clone()方法 总结 Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,clone()方法是Object类里面的方法,默认实现是一个Native方法. 今天在做对象拷贝的时候发现一个问题 某类实现Cloneable接口后,还要重新实现Object类中的clone()方法: 感觉有点奇怪,这个类里

  • Vue之事件处理和事件修饰符详解

    <div id="root"> <h2>{{name}},加油!</h2> <!-- 阻止默认事件 --> <a @click.prevent="showInfo" href="https:www.baidu.com">点我提示信息</a> <!-- 阻止事件冒泡 --> <div class="demo1" @click="s

  • Vue中子组件向父组件传值以及.sync修饰符详析

    目录 Vue中 常见的组件通信方式可分为三类 1. 之前的写法 2. .sync 修饰符 总结 传送门:Vue中 状态管理器(vuex)详解及应用场景 传送门:Vue中 $ attrs.$ listeners 详解及使用 传送门:Vue中 事件总线(eventBus)详解及使用 传送门:Vue中 provide.inject 详解及使用 Vue中 常见的组件通信方式可分为三类 父子通信 父向子传递数据是通过 props,子向父是通过 events($emit):通过父链 / 子链也可以通信($p

  • Kotlin 内联函数详解及实例

    Kotlin 内联函数详解及实例 概述 在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行.也就是通常说的压栈和出栈.因此,函数调用要有一定的时间和空间方面的开销.那么对于那些函数体代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大. 那怎么解决这个性能消耗问题呢,这个时候

随机推荐