文章目录

  • 默认的访问修饰符
  • 限制修饰符
  • 可见性修饰符
  • sealed密封类
  • 学习交流

默认的访问修饰符

在Kotlin世界中,无任何修饰的class、方法,等等默认就是public的,所以是隐式的

  • public的class
class MyActivity {
}
  • public 的方法
fun methord() {
}
  • public 的变量
var temp: String? = null
  • public的构造方法
constructor() : super() {}

Kotlin的访问控制分为 限制修饰符 与 可见性修饰符 。

限制修饰符

当你想要指定一个类、方法及属性的修改或者重写权限时,你就需要用到限制修饰符。
限制修饰符包括:默认(final)、open、abstract、sealed。由于Kotlin中类、方法及属性默认是final,不可被继承或重写的,所以要继承或重写必须加上open。

  • Kotlin与Java的限制修饰符比较
限制修饰符 Kotlin中含义 与Java比较
默认(final) 不允许被继承或重写 与Java指定final的效果一致
open 允许被继承或重写 相当于Java的默认情况
abstract 抽象类或抽象方法 与Java一致
sealed 若要继承则需要将子类定义在同一个文件

可见性修饰符

若你想要指定类、方法及属性的可见性,那么就需要可见性修饰符。可见性修饰符包括:public、internal、protected、private。

可见性修饰符 Kotlin中含义 与Java比较Java访问权限修饰词
public Kotlin中默认修饰符 全局可见 与Java中public效果相同
internal 模块内可见
protected 受保护修饰符,类及子类可见 含义一致,但作用域除了类及子类外,包内也可见
private 私有修饰符类内修饰只有本类可见,类外修饰文件类可见 私有修饰类,只有类内可见

sealed密封类

Kotlin通过sealed关键字来修饰一个类为密封类,若要继承则需要将子类定义在同一个文件,其他文件中的类将无法继承它。但这种方式有它的局限性,即它不能被初始化,因为它背后是基于一个抽象类实现的。密封类的使用场景有限,它可以看成一种功能更强大的枚举,所以它在模式匹配中可以起到很大的作用。

  • 1.密封类用sealed关键词表示
  • 2.密封类的子类只能定义在密封类的内部或同一个文件中,因为其构造方法为私有的
  • 3.密封类相比于普通的open类,可以不被此文件外被继承,有效保护代码
  • 4.与枚举的区别:密封类适用于子类可数的情况,枚举适用于实例可数的情况
sealed class PlayerCmd { //演奏控制类(密封类)val playerName: String = "Player"//演奏类class Player(val url: String, val position: Long = 0): PlayerCmd() { fun showUrl() {println("$url, $position")}}class Seek(val position: Long): PlayerCmd() //快进object Pause: PlayerCmd() //暂停(无需进行重载的类适合用单例object)
}(密封类的子类也可以定义在密封类的外部,但要在同一个文件中)
object Resume: PlayerCmd() //继续object Stop: PlayerCmd() //停止enum class PlayerState { //枚举适合表现简单的状态IDLE, PAUSE, PLAYING, STOP
}fun main(args: Array<String>) {PlayerCmd.Player("苍茫的天涯").showUrl()println(Resume.playerName)
}
  • internal:模块内可见。一个模块是编译在一起的一套 Kotlin 文件,可以看作一起编译的Kotlin文件组成的集合

学习交流

欢迎入群交流学习,Android、Java开发技术交流群

  • QQ群:810970432
  • email:geduo_83@163.com

Kotlin-简约之美-进阶篇(四):访问权限控制相关推荐

  1. shell编程之进阶篇四简单流程控制

    简单流程控制语句 单分支if语句 语法格式 if [ 条件 ] then指令 fi 场景: 单一条件,只有一个输出 单分支if语句示例 #!/bin/bash # 单if语句的使用场景 if [ &q ...

  2. Android日志[进阶篇]四-获取错误报告

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

  3. APC控制Linux关机,NAS进阶 篇四:利用APCPowerchuteNetworkShutdown实现断电自动关闭虚拟机...

    NAS进阶 篇四:利用APCPowerchuteNetworkShutdown实现断电自动关闭虚拟机 2020-02-05 21:50:25 20点赞 118收藏 16评论 在2018年写<NA ...

  4. android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...

    一.类和构造方法 (类和对象在百度百科已经有详细的介绍,这里只做简单的描述以及帮助理解:百度百科:类和对象,需要注意的是,百度百科类和对象的举例中都是C++,书写格式不要和Java混淆!) 什么是类? ...

  5. java按钮权限控制_详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...

  6. Java访问权限控制

    面向对象的核心思想之一就是封装,只把有限的方法和成员公开给别人,这也是迪米特法则的内在要求,是外部调用方对方法体内的实现细节知道得尽可能少. 如何实现封装呢? 需要使用某些关键字来限制外部对类内属性和 ...

  7. 爆破专栏丨Spring Security系列教程之Spring Security的四种权限控制方式

    原创:一一哥 前言: 在前面的章节中,一一哥 已经给大家介绍了Spring Security的很多功能,在这些众多功能中,我们知道其核心功能其实就是认证+授权. 在前面我们分别基于内存模型.基于默认的 ...

  8. java权限控制是什么_Java访问权限控制的重要性深入讲解

    前言 人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说"钱乃身外之物,生不带来死不带去",但我们 ...

  9. java权限控制是什么_论Java访问权限控制的重要性

    人在什么面前最容易失去抵抗力? 欢迎工作一到八年的Java工程师朋友们加入Java高级交流:854630135 本群提供免费的学习指导 架构资料 以及免费的解答 不懂得问题都可以在本群提出来 之后还会 ...

最新文章

  1. python爬虫天气实例scrapy_python爬虫之利用scrapy框架抓取新浪天气数据
  2. 前端中的this,指的是什么?
  3. wangEditor - 轻量级web富文本编辑器(可带图片上传)
  4. Windows定时删除某天前文件的批处理脚本
  5. 树莓派 -- 按键 (key)使用BCM2835 gpio library
  6. 操作系统原理:连续的内存分配
  7. oracle 10g 关库,Oracle Db10g 启动和关闭数据库
  8. matlab语言 列车平稳性指标,铁道车辆平稳性分析报告.docx
  9. 三农电子商务创业创新大赛作品_全国大学生电子商务“创新、创意及创业”挑战赛五邑大学校赛...
  10. [实验手册]MPLS/×××分解:防止PE-CE的路由环路
  11. 3G移动通信技术分析
  12. 集成hello到OpenDaylight发行版中
  13. Java实现自定义敏感词库过滤
  14. 数据库设计的基本规范和原则
  15. 3D制图软件中怎么设计凸轮?3D设计凸轮教程
  16. 基于BS模型与基于二叉树模型的欧式期权定价与希腊字母结果对比
  17. SDL 加载显示JPEG图片
  18. CPU虚拟化技术及QEMU/KVM虚拟机安装实践
  19. Android子控件超出父控件的范围被覆盖问题
  20. 用计算机打字教案,教学设计-有趣的打字练习游戏

热门文章

  1. MySql查询某一天的数据
  2. C解析8583报文55域
  3. springboot集成微信和QQ第三方登录
  4. 旷厂练习生 Vol.16 | 两次进入研究院里的“研究院”实习是种什么体验?
  5. JAVA有percentile函数吗_Python numpy.percentile函数方法的使用
  6. Python中用PyPDF2拆分pdf提取页面
  7. java flv转mp3_java调用FFmpeg及mencoder转换视频为FLV并截图
  8. runtime Caller 方法再封装
  9. mysql 1032 1062_mysql slave频繁报1032_1062错误
  10. VLC保存网络视频及抓包合成视频