前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin之构造规则

Kotlin之构造规则

作者头像
大话swift
发布2019-09-17 17:27:31
5020
发布2019-09-17 17:27:31
举报
文章被收录于专栏:大话swift

之前我们介绍了Kotlin的流程控制和标准库常用扩展,今天我们聊聊类的构造和继承的一些常规

Constructors

在Kotlin的森林法则中一个class有一个Primary Constructor除此之外可以有多个secondary constructor。Primary Constructor处于class声明的头位置---紧跟这类名

例如

代码语言:javascript
复制
class Person constructor(firstName: String) {

}

而默认情况下Primary constructor中的construct是可以省略的,因此可以简化为:

代码语言:javascript
复制
class Person(val firstName: String) {

}

介绍完了Primary COnstructor我们看看Secondary Constructor----与Primary不同,secondary的constructor关键字并不能省略,并且必须是处于class声明体内部。除此之外,加入class有primary constructor的情况下,secondary还需要直接或者非直接的采用this作为关键词去代理Primary的构造完成数据的传递与统一

代码语言:javascript
复制
class Person( var firstName: String) {
    constructor(firstName: String, age: Int) : this(firstName) {
    }
}

继承

在Kotlin的体系中所有的类都有一个共同的父类Any并且这个Any作为所有类缺省的默认超级父类

代码语言:javascript
复制
class Person

甚至这么简单的声明的一个class也是Any的子类,并且默认的继承了equals() hasCode() 和 toString()这三个基本的方法

继承中的构造函数

上文中我们说了构造函数,那么继承中是怎么处理这些构造函数的呢?

1 Primary

假如父类有了Primary那么子类要有Primary的构造(非必须的)

代码语言:javascript
复制
open  class Base(p: Int)
class Derived(p: Int) : Base(p) {
    constructor(p:Int, tag:String):this(p)
}

上栗中 Base有了Primary的构造方法,因此子类Derived也必须要有一个,但是不影响子类有secondary的构造方法

2 Secondary

假如子类不去依据父类添加Primary构造方法,那么对于子类来说需要在Secondary去deleagte父类的Primary沟构造方法,并且每个Secondary构造都需要去deleaget一下父类的Primary构造

代码语言:javascript
复制
open  class Base(p: Int)
class Derived:Base{
    constructor(p:Int, tag:String):super(p)
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档