Kotlin学习笔记3-4 类和对象-访问限制

本文详细介绍了Kotlin中的访问控制修饰符,包括private、protected、internal及public,并解释了它们在不同上下文中的作用范围,如类、接口、构造函数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

访问限制

Kotlin官网:Classes and Objects-Visibility Modifiers
类、对象、接口、构造函数、函数、属性和属性setter都可以加访问限制。
属性getter默认和属性的访问限制一致。
4种:private, protected, internal, public
不声明时默认为public

顶级元素,直接声明在包中的
* 不声明访问限制默认为public,均可见
* 声明为private的本文件内可见
* internal本module内可见
* 顶级元素不支持protect级别的访问限制
注意:在其他包中使用,即使访问限制可见,也需要声明导入

// file name: example.kt
package foo

private fun foo() {} // 本文件内可见

public var bar: Int = 5 // 公开的属性
    private set         // 私有setter

internal val baz = 6    // 同一module可见

类和接口

对于类中的成员:
* private:本类内部可见
* protected:本类和子类
* internal:同module
* public:公开
* 注意:和Java不同的地方,内部类的private成员对于外部类不可见
* 重写protected成员,没有指定访问限制时,默认还是protected

open class Outer {
    private val a = 1
    protected open val b = 2
    internal val c = 3
    val d = 4  // public by default

    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a is not visible
    // b, c and d are visible
    // Nested and e are visible

    override val b = 5   // 'b' is protected
}

class Unrelated(o: Outer) {
    // o.a, o.b are not visible
    // o.c and o.d are visible (same module)
    // Outer.Nested is not visible, and Nested::e is not visible either 
}

构造函数

如果要给构造函数添加访问限制,需要显式地声明construtor关键字

class C private constructor(a: Int) { ... }

局部成员

局部变量、函数、类不能加访问限制

module

internal限制同一module可见
module的定义:
* an IntelliJ IDEA module;
* a Maven project;
* a Gradle source set;
* a set of files compiled with one invocation of the Ant task.

总结

关键字
private本文件本类
protected不支持本类和子类
internal本模块本模块
public公开公开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值