Kotlin最简单的入门教程——可见性修饰符,扩展,数据类,密封类
来源:互联网 发布:树形网络拓扑图 编辑:程序博客网 时间:2024/05/01 11:35
1 可见性修饰符
在 Kotlin 中有这四个可见性修饰符:private、 protected、 internal 和 public。 如果没有显式指定修饰符的话,默认可见性是 public
文件名和类名可以不同
// 文件名:example.ktpackage foofun baz() {}class Bar {}
对于类内部声明的成员:
private 意味着只在这个类内部(包含其所有成员)可见;
protected—— 和 private一样 + 在子类中可见。
internal —— 能见到类声明的 本模块内 的任何客户端都可见其 internal 成员;
public —— 能见到类声明的任何客户端都可见其 public 成员。
对于Java用户:Kotlin 中外部类不能访问内部类的 private 成员。
如果你覆盖一个 protected 成员并且没有显式指定其可见性,该成员还会是 protected 可见性。
open class Outer { private val a = 1 protected open val b = 2 internal val c = 3 val d = 4 // 默认 public protected class Nested { public val e: Int = 5 }}class Subclass : Outer() { // a 不可见 // b、c、d 可见 // Nested 和 e 可见 override val b = 5 // “b”为 protected}class Unrelated(o: Outer) { // o.a、o.b 不可见 // o.c 和 o.d 可见(相同模块) // Outer.Nested 不可见,Nested::e 也不可见}
2 扩展
Kotlin 支持 扩展函数 和 扩展属性。
我们需要用一个 接收者类型 也就是被扩展的类型来作为他的前缀。 下面代码为 MutableList 添加一个swap 函数:
fun MutableList<Int>.swap(index1: Int, index2: Int) { val tmp = this[index1] // “this”对应该列表 this[index1] = this[index2] this[index2] = tmp}
这个 this 关键字在扩展函数内部对应到接收者对象(传过来的在点符号前的对象) 现在,我们对任意 MutableList 调用该函数了:
val l = mutableListOf(1, 2, 3)l.swap(0, 2) // “swap()”内部的“this”得到“l”的值
扩展函数只能使用类名调用,因为他是静态的
class C { fun foo() { println("member") }}fun C.foo() { println("extension") }
3 数据类
数据类必须满足以下要求:
主构造函数需要至少有一个参数;
主构造函数的所有参数需要标记为 val 或 var;
数据类不能是抽象、开放、密封或者内部的;
(在1.1之前)数据类只能实现接口。
data class User(val name: String = "", val age: Int = 0)
在很多情况下,我们需要复制一个对象改变它的一些属性,但其余部分保持不变。 copy() 函数就是为此而生成。对于上文的 User 类,其实现会类似下面这样:
fun copy(name: String = this.name, age: Int = this.age) = User(name, age) 这让我们可以写val jack = User(name = "Jack", age = 1)val olderJack = jack.copy(age = 2)
4 密封类
类名前面添加 sealed 修饰符。虽然密封类也可以 有子类,但是所有子类都必须在与密封类自身相同的文件中声明
sealed class Exprdata class Const(val number: Double) : Expr()data class Sum(val e1: Expr, val e2: Expr) : Expr()object NotANumber : Expr()
5 枚举类
枚举类的最基本的用法是实现类型安全的枚举
enum class Direction { NORTH, SOUTH, WEST, EAST}
最后欢迎加入Kotlin QQ群,一起讨论学习:
欢迎关注 微信公号
- Kotlin最简单的入门教程——可见性修饰符,扩展,数据类,密封类
- Kotlin汇总3-接口,可见作用域,扩展,数据类,密封类
- Kotlin最简单的入门教程——类和继承
- [kotlin系列] (s2_3)扩展、数据类、密封类
- Kotlin学习(四)—— 类和对象,继承,覆盖,抽象类,属性和字段,接口,可见性修饰符,扩展
- Kotlin——数据类和密封类
- Kotlin学习(十): 可见性修饰符和数据类
- Kotlin类和对象 (四)--- 可见性修饰符
- Kotlin 可见性修饰符
- Kotlin最简单的入门教程——神秘的Lambda
- Kotlin最简单的入门教程——环境
- Kotlin最简单的入门教程——委托
- Kotlin最简单的入门教程——集合
- Kotlin 学习之可见性修饰符
- Kotlin-2.4-可见性修饰符
- Kotlin(2.7)密封类
- 学习kotlin第八天_接口、可见性修饰符、扩展
- Kotlin最简单的入门教程——关键字,操作符,异常,空指针
- Kotlin最简单的入门教程——类和继承
- 使用angular-cli构建angular2项目时遇到的问题及解决方案
- angularjs——directive
- 文献阅读(10)
- tableView的点击事件或textfield 与手势冲突解决
- Kotlin最简单的入门教程——可见性修饰符,扩展,数据类,密封类
- Android 获取手机厂商、系统版本等信息
- ORACLE 数值正则表达式
- 通讯协议——目录
- 超长正整数相加
- Spring中任务调度cronExpression配置说明
- 详解SpringMVC使用MultipartFile实现文件的上传
- linux 安装jdk
- jqgrid-2动态改变列编辑属性