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

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

一、 四种修饰符的说明
public修饰符表示 公有 。此修饰符的范围最大。当不声明任何修饰符时,系统会默认使用此修饰符。internal修饰符表示 模块 。对于模块的范围在下面会说明。protected修饰符表示 私有+子类。值得注意的是,此修饰符不能用于顶层声明,在下面可以看到。private修饰符表示 私有 。此修饰符的范围最小,即可见性范围最低。
二、在不同场景下各个修饰符声明的范围讲解
对于可见性修饰符来说,不管是
Java还是Kotlin,在不同的场景下用可见性修饰符修饰过的变量、函数、属性等都有不同的引用范围。
2.1、在包(package)中声明,即顶层声明的情况
在顶层申明中分为下面两种情况:
- 在同一个文件中访问的情况
- 在不同文件中访问的情况
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中也是存在的,只不过我们更习惯称其为方法重载。对此还不甚清晰的,可以阅读我的上一篇文章Kotlin——中级篇(一):类(class)详解。
故而,当我们在构造函数中声明的情况下,如果是主构造函数的时候,是和在类(class)中声明的情况是一样的。如果是主构造函数的时候,则是和在局部声明的情况是一样的。
2.4、局部声明的情况
在局部声明的情况下,只能使用
public修饰符修饰的变量。并且在变量只能在局部这个范围内使用,出了这个范围后就访问不到了。
三、与Java中的可见性修饰符的对比
Java中的可见性修饰符和Koltin中的可见性修饰符还是很有几点不同之处的:
1、 四种修饰符的不同。Koltin的四种修饰符(public、interna、protected、private),Java的的四种修饰符(public、protected、privavte、default(即不使用任何修饰符))。
2、默认修饰符的不同。Kotlin的默认修饰符为public,Java的默认修饰符为default。
四、总结
此节主要涉及的知识大部分是理论知识,上面分析了各个修饰符在每一种情况下的范围使用。这一节是很基础的东西,但是越是基础的东西越是容易忘记,甚至记得不清晰,各位可以好好看一下各种情况下的截图,上面写的很是清晰,并且对每一点下面都作了小结。
如果各位大佬看了之后感觉还阔以,就请各位大佬随便star一下,您的关注是我最大的动力。
我的个人博客:Jetictors
我的掘金:Jetictors
Github:Jetictors
欢迎各位大佬进群共同研究、探索
QQ群号:497071402
Kotlin——中级篇(三):可见性修饰符详解的更多相关文章
- Koltin——最详细的可见性修饰符详解
在Kotlin中,不管是类,对象,接口,构造函数,函数,属性及其设置器都具有可见性修饰符.Kotlin中的可见性修饰符共四种.即public.protected.private.internal.在不 ...
- Java之Static静态修饰符详解
Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...
- abstract关键字、final关键字、static关键字、访问修饰符详解
abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:
- C# 中4个访问符和8个修饰符详解
4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所 ...
- C# 之 4个访问修饰符和8个声明修饰符详解
一.4个访问修饰符(是添加到类.结构或成员声明的关键字) [1] Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. [2] Internal:内部的,是类型和类型成员的访问修饰符 ...
- C#修饰符详解
不定期更新,2017.8.9 一.new 别看new这个修饰符经常用,恐怕很多人都不知道其本质.我们先来看看new修饰符的官方定义: new 仅允许在嵌套类声明中使用,表明类中隐藏了由基类中继承而来的 ...
- Vue.js学习笔记之修饰符详解
本篇将简单介绍常用的修饰符. 在上一篇中,介绍了 v-model 和 v-on 简单用法.除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现.通常都是在指令后面用小数点“.”连接修饰符名 ...
- protected修饰符详解
protected这个修饰符,各大参考书都会这样说:访问权限为类内,包内和子类,因此在父类中定义的方法和成员变量如果为protected修饰的,是可以在不同包中的子类进行访问的,示例代码如下: pac ...
- AJPFX分享JAVA修饰符详解
1.类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1 )公共类修饰符 pub ...
随机推荐
- spring 动态定时任务
功能介绍:商品自动上架.按修改或添加时设置的自动上架时间而启动定时任务 更改商品状态为上架. spring 中配置文件 <?xml version="1.0" encodin ...
- Python 3 初探,第 1 部分: Python 3 的新特性
Python 3 是 Guido van Rossum 功能强大的通用编程语言的最新版本.它虽然打破了与 2.x 版本的向后兼容性,但却清理了某些语法方面的问题.本文是系列文章中的第一篇,介绍了影响该 ...
- 百度MUX:APP动效之美需内外兼修
移动互联网时代已经到来.APP已如天空的繁星.数也数不清.随着手机硬件的不断升级,实现炫酷且流畅的动效不再是遥远的梦想.假设你是APP达人,喜欢试用各种APP,你肯定会发现越来越多的APP開始动效化. ...
- 01-Hibernate Tools for Eclipse Plugins安装
Hibernate Tools for Eclipse Plugins安装 在线安装有两种方法 方法一:"Help > Install New Software Updates&quo ...
- jQuery 获取DOM节点的两种方式
jQuery中包裹后的DOM对象实际上是一个数组,要获得纯粹的DOM对象可以有两种方式: 1.使用数组索引方式访问,例如: var dom = $(dom)[0]; 如: $("#id&qu ...
- JSON基本概念及使用
JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...
- Pattern Recognition and Machine Learning 模式识别与机器学习
模式识别(PR)领域: 关注的是利⽤计算机算法⾃动发现数据中的规律,以及使⽤这些规律采取将数据分类等⾏动. 聚类:目标是发现数据中相似样本的分组. 反馈学习:是在给定的条件下,找到合适的动作, ...
- Python MySQLdb 使用utf-8 编码插入中文数据
参考地址:http://blog.csdn.net/dkman803/article/details/1925326/ 本人在使用python,mysqldb操作数据库的时候,发现如下问题,编码如下: ...
- Atitit.java swing打印功能 api attilax总结
Atitit.java swing打印功能 api attilax总结 1. 打印方式有三种:2 1.1. 一是不经过任何修改,直接调用javascript中的window.print()打印.2 ...
- C#协变与逆变
http://zh.wikipedia.org/wiki/%E5%8D%8F%E5%8F%98%E4%B8%8E%E9%80%86%E5%8F%98 协变与逆变是程序设计语言中的类型系统的一对概念.类 ...
