kotlin---02、基本语法(包,可见)

本文介绍了Kotlin的基本语法,包括可见性修饰符如`private`、`protected`、`internal`和`public`的用法,以及它们在类、接口、构造函数等中的应用。此外,还讲解了包的概念,如何定义顶级函数和类,以及不同可见性的作用范围。在Kotlin中,顶级声明默认为`internal`,而函数和属性必须明确指定返回类型。

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

可见修改

类、对象、接口、构造函数、函数、属性及其setter具有可见性修饰符。(getter总是有相同的可见性属性。)在Kotlin有四个可见性修饰符:

  • private —可见只有在声明的范围及其方法(在同一模块);,跟java一 直只有在当前类中可见
  • protected —(只适用于类/接口成员)像private,但子类可见;
  • internal —(默认情况下使用)可见在同一个模块中(如果声明范围是可见的)的所有者,就是在同一个包名下可见;
  • public — 全局可见

note:函数表达式的休和所有属性声明public必须显式地指定返回类型这是必需的,所以我们不意外改变一种这是一个公共API的一部分,仅通过改变实现

public val foo: Int = 5    // explicit return type required
public fun bar(): Int = 5  // explicit return type required
public fun bar() {}        // block body: return type is Unit and can't be changed accidentally, so not required

请查看以下的解释这些不同类型的声明范围。

函数、属性和类对象和接口可以定义“顶级”,即直接在一个包:

// file name: example.kt
package foo

fun baz() {}
class Bar {}
  • 如果你不指定任何可见性修饰符,internal的是默认情况下,这意味着你的声明将在同一个模块中随处可见
  • 如果你标记一个声明private的,只有这个包内可见及其子,只有在同一个模块中;
  • 如果你标记,public它到处可见;
  • protected并不是用于顶级声明

例如:

// file name: example.kt
package foo

private fun foo() {} // visible inside this package and subpackaged

public var bar: Int = 5 // property is visible everywhere
    private set         // setter is visible only in this package and subpackages

internal val baz = 6    // visible inside the same module, the modifier can be omitted    

类和接口

当我们在定义在一个类上时:

  • private的意思是可见在这个类中仅(包括其所有成员);
  • protected — 和private一样再加上子类
  • internal-所有的client在这个模块下,并且定义的类的成员为internal可见
  • public 任何的client都可以查看类中public成员

note:在kotlin中内部类不能访问外部类的私有成员

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

    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
}

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 
}

构造函数

class C private constructor(a: Int) { ... }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值