Koltin——最详细的可见性修饰符详解
在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
我的简书:http://www.jianshu.com/u/9877d6088780
Koltin——最详细的可见性修饰符详解的更多相关文章
- Kotlin——中级篇(三):可见性修饰符详解
在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 仅允许在嵌套类声明中使用,表明类中隐藏了由基类中继承而来的 ...
- PHP正则表达式模式修饰符详解
PHP模式修饰符又叫模式修正符,是在正则表达式的定界符之外使用.主要用来调整正则表达式的解释,提扩展了正则表达式在匹配.替换等操作的某些功能,增强了正则的能力.但是有很多地方的解释都是错误的,也容易误 ...
- C#.net 中 修饰符 详解 (来自MSDN)
自己理解的不够深刻,无奈基础较差!记上一笔,记忆深刻些,哈哈…… 1. 访问修饰符 public 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员. private 只有同一 ...
- Vue.js学习笔记之修饰符详解
本篇将简单介绍常用的修饰符. 在上一篇中,介绍了 v-model 和 v-on 简单用法.除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现.通常都是在指令后面用小数点“.”连接修饰符名 ...
随机推荐
- [Scikit-learn] 1.2 Dimensionality reduction - Linear and Quadratic Discriminant Analysis
Ref: http://scikit-learn.org/stable/modules/lda_qda.html Ref: http://bluewhale.cc/2016-04-10/linear- ...
- CodePath Android CliffNotes 之 Effective Java for Android 翻译
概述: 这篇文章的目的是作为这篇博文的开源版本,而netcyrax是该指南的原始文章的唯一作者. 请在下面添加您自己的在Android中Java最佳实践.技巧和巧妙! 建造者模式 当你拥有一个需要超过 ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
- Java反射机制能够获取的信息,与应用
一.什么是Java反射机制? [1]反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法: [2]对于任意一个对象,都能够调用它的任意一个属性和方法: 像这种动态获取类的信息以及动 ...
- HDU 6121 Build a tree(找规律+模拟)
Build a tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- Node.js Stream(流)
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出). Node.js,Str ...
- 如何优雅的设计 React 组件
作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家 ...
- 第一章 Linux系统介绍与环境搭建准备
1.操作系统: Operating System,简称OS,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心. 操作系统就是处于用户与计算机系统硬件之间用于传递信息的系统程序软件. ...
- hibernate flushMode 错误
1 十一月 15, 2017 10:13:36 上午 org.apache.struts2.dispatcher.Dispatcher error 2 严重: Exception occurred d ...
- MVC 页面静态化
最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...