Kotlin - 类及成员的可见性
发布日期:2021-06-30 18:37:53
浏览次数:2
分类:技术文章
本文共 1523 字,大约阅读时间需要 5 分钟。
类及成员可见性
Kotlin 中可见性有 4 个级别:private
-> protect
-> internal
-> public
,从左至右可见范围逐渐放宽。
Kotlin | Java | 可见性 |
---|---|---|
private | private | 自己可见 |
protected | protected | 子类可见 |
- | default(默认) | 包内可见(Java 特有) |
internal | - | 模块内可见(Kotlin 特有) |
public(默认) | public | 外部可见 |
为了方便理解,这里举个例子,一个父亲的零花钱只能自己使用(private
),游戏机可以给孩子使用(protected
),族谱可以给村里人使用(internal
),名片可以给所有人使用(public
)。
open class Father { private val pinMoney = 200 // 零花钱 protected val gamePlayer = Switch() // 游戏机 internal val familyTree = FamilyTree() // 族谱 // public val callingCard = CallingCard() val callingCard = CallingCard() // 名片}
因为 kotlin 中类及成员可见性默认是 public
,所以 public
可以不写。来看看子类 Son 中访问父类 Father 中成员属性会是如何:
class Son : Father() { fun getFromFather() { val pinMoney = super.pinMoney // IDE报错:Cannot access 'pinMoney': it is private in 'Father' val gamePlayer = super.gamePlayer val familyTree = super.familyTree val callingCard = super.callingCard }}
可见子类最多可以访问父类 protected
级别的成员,再来看看外界访问 Father 成员属性的情况:
fun main(args: Array) { val father = Father() val pinMoney = father.pinMoney // IDE报错:Cannot access 'pinMoney': it is private in 'Father' val gamePlayer = father.gamePlayer // IDE报错:Cannot access 'gamePlayer': it is protected in 'Father' val familyTree = father.familyTree val callingCard = father.callingCard}
外界最多可以访问类中 internal
级别的成员。internal 是模块内可见,这里的模块指的是 IDEA 项目结构中的 Module(ModuleB 不能访问 ModuleA 中 internal 类与成员),有兴趣的话,可以自己尝试下。
Kotlin 中的 internal 与 Java 中的 default 是不一样的,所以,如果代码要做到两者互通的话,建议还是少用 internal。
转载地址:https://linqiarui.blog.csdn.net/article/details/113447628 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月20日 15时05分27秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Grid SearchCV(网格搜索)& Python实现
2019-04-30
ROS相关知识
2019-04-30
单目深度估计 monodepth2模型 代码
2019-04-30
位图索引Bitmap indexes
2019-04-30
YOLO算法(二)—— Yolov2 & yolo9000
2019-04-30
YOLO算法(三)—— Yolov3 & Yolo系列网络优缺点
2019-04-30
Python的__future__模块
2019-04-30
计算机视觉中的cost-volume的概念具体指什么(代价体积)
2019-04-30
启发函数heuristic 与 A*
2019-04-30
Image Pyramid(图像金字塔)
2019-04-30
Oracle 作业记录
2019-04-30
putty连接AWS配置(multimedia project)
2019-04-30
Hourglass Network 沙漏网络 (pose estimation姿态估计)
2019-04-30
OpenCV实战(二)——答题卡识别判卷
2019-04-30