我的Kotlin学习之旅(四)
来源:互联网 发布:网络卡牌类游戏 编辑:程序博客网 时间:2024/05/21 14:53
类和继承
1.类
在Kotlin中类也是用class表示,与Java不同的是,如果这个类没有内容,可以省略这对大括号
可以只写:
class Person
2.构造函数
在 Kotlin 中类可以有一个主构造函数以及多个二级构造函数。主构造函数是类头的一部分:跟在类名后面
例如:
class Person constructor(name: String) {}
这个主构造函数有一个形参,类型是String,形参名是name,这些都是可以由自己的需求决定的。
当这个主构造函数没有使用注解(例如inject–>来自最近用到的Dagger等,有兴趣的朋友可以看看我的另外一篇:http://blog.csdn.net/ckwccc/article/details/78686194)
或者没有可见性说明(例如private等)时,可以省略关键字constructor,直接写成:
class Person (name: String) {}
主构造函数不能包含任意代码。初始化代码可以放在以 init 做前缀的初始化块内
当创建这个类时,Kotlin会自动的去加载init这个代码块
class Person(name: String) { init { name = "ckwcc" }}
注意主构造函数的参数可以用在初始化块内,也可以用在类的属性初始化声明处:
例如:
class Person(name: String) { //类的属性初始化声明 val customerKry = name.toUpperCase()}
还有一种更加简洁的声明方式(直接在主构造函数中声明):
class Person(val name: String,var age: Int) { //注意: val:一旦赋值之后就不能再改变了,而var可以}
3.二级构造函数
类的二级构造函数,需要加前缀 constructor:
class Person (name: String){ constructor(age: Int) { //必须有constructor关键字 }}
如果一个非抽象类没有声明构造函数(主构造函数或二级构造函数),它会产生一个没有参数的构造函数。该构造函数的可见性是 public 。这个东西的影响是在继承它的时候,你需要在类名后面加一对小括号:
class StickyHeaderActivity : AppCompatActivity()
如果类有主构造函数,每个二级构造函数都要,或直接或间接通过另一个二级构造函数代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字:
class Person(val name: String) { constructor (name: String, paret: Person) : this(name) { parent.children.add(this) }}
4.类实例的使用
这里需要注意的是,Kotlin中没有 new 这个关键字,而且所有的值都需要用val或者var来接收,这个我在一开始学习的时候也觉得有一点点不习惯,因为在Android中,都是用自己的类型来接收的。
val person = Person()
5.继承
声明一个明确的父类,需要在类头后加冒号再加父类
例如
open class Base(p: Int)//这是父类class Derived(p: Int) : Base(p)//子类继承父类,需要写父类的主构造函数,里面的值是自己的主构造的参数
6.抽象类
关键字也是abstract,抽象函数和抽象类默认是open的,即可以被继承或者复写
7.复写(方法或者属性)
如果父类的某个方法或者属性想要被子类复写,需要加上open关键字
而子类复写的方法上必须有override 关键字
- 我的Kotlin学习之旅(四)
- 我的Kotlin学习之旅 ( 三 )
- 我的Kotlin学习之旅(一)
- 我的Kotlin学习之旅(二)
- 我的Kotlin学习之旅(五)
- 我的Kotlin学习之旅(六)
- 我的u3d学习之旅四
- kotlin学习笔记(四)
- kotlin学习笔记(四)
- kotlin学习笔记(四)
- Android开发,Kotlin的了解与学习(四)-----基本语法之方法、操作符
- kotlin学习之旅
- Kotlin学习过程 四 Kotlin对Android而言的便利
- Kotlin学习(学习kotlin的日子)
- 我的CTF之旅(四)
- Kotlin与Android的奇妙之旅-函数扩展(四)
- 我的Kotlin For Android之路开篇(一)
- 我的Kotlin For Android之路开篇(二)
- md test
- android 串口编程
- 5.1.Spring之自动装配
- 如何搭建Redis集群与Jedis连接集群
- SparkRDDAPI常用算子说明
- 我的Kotlin学习之旅(四)
- 完成第一个项目的心得
- c:foreach中varStatus参数的含义
- 容器化的MySQL性能如何
- 从网络请求数据保存到数据库。
- vc编译libuv
- linux查看日志
- 用IOT的思维来管理我们的查看我们重要业务的服务器健康状态-Powershell模块配置篇!
- 湘潭大学2017年下学期程序设计实践-模拟测试2 题解