Kotlin 类、对象、接口

Kotlin中类、接口相关概念与Java一样,包括类名、属性、方法、继承等,如下示例:

interface A {
    fun bar()
    fun foo() {
    // 可选方法体
    }
}

class Child: A {
    override fun bar() {
        // todo
    }
    override fun foo() {
        super.foo()
    }
}

class

  • 构造器

Kotlin 中的类可以有一个 主构造器, 以及一个或多个次构造器, 主构造器是类头部的一部分, 位于类名称之后。
class Person constructor(name: String) {...}

如果主构造器没有任何注解(annotation), 也没有任何可见度修饰符, 那么 constructor 关键字可以省略
class Person(name: String) {...}

主构造器中不能包含任何代码. 初始化代码可以放在初始化代码段 (initializer block) 中

class Persion(name: String) {
    private val firstName: String = name
    private var age: Int
    init {
        age = 10
    }
}

Kotlin 有一种简洁语法, 可以通过主构造器来定义属性并初始化属性值:
class Persion(val name: String, var age: Int) {...}

如果构造器有注解, 或者有可见度修饰符, 这时 constructor 关键字是必须的, 注解和修饰符要放在它之前
class Persion public @Inject constructor(val name: String) {...}

类还可以声明次级构造器 (secondary constructor)。如果类有主构造器, 那么次级构造器都必须委托给主构造器

class Persion(val name: String) {
    constructor(name: String, age: Int): this(name) {
        // todo
    }
}
  • 类实例化

Kotlin 没有 new 关键字

val persion = Persion("jason")
  • 继承

Kotlin的继承概念和Java一样,”类名: 超类“ 冒号表示继承。
与Java的Object相对,Kotlin也有一个这样的Any类,类默认继承Any。
与Java的final相反,Kotlin类默认是final的,允许被继承的类,需要加 open 修饰。

open class Base {
    open fun v() {...}
    fun nv() {...} // can't be override
}
  • 方法和属性的覆盖

方法的覆盖和Java类似,但是只有 open 的方法才能 override, final 类是不允许定义 open方法。

class Other: Base() {
    override fun v() {...}
}

可以加final禁止ovrride, final override fun v() {...}

与方法的覆盖类似, Kotlin提供了属性的覆盖,例如

open class Foo {
    open val x: Int = 0
}

class Bar(override val x: Int): Foo {...}

class Bar1: Foo() {
    override var x: Int = 0 // override to var
}
  • 抽象类

类本身, 或类中的部分成员, 都可以声明为 abstract 的, 抽象类不必标识 open。

abstract class Base {
    abstract fun v()
}
  • 同伴对象

Kotlin 的类没有静态方法, 大多数情况下, 建议使用包级函数(packagelevel function)替代, 或者使用同伴对象,
达到静态方法效果

class Foo {

companion object {
    fun v() {}
}
}

interface

Kotlin 的接口和Java差不多,但是接口的属性不一样,Kotlin接口中的属性是抽象的。

interface A {
    val x: Int
}

class B: A {
    override val x: Int = 10
}

object

Kotlin 没有静态类, 可以用object实现静态类的效果。

object B {
    fun foo() {
        // do something
    }
}

class A {
    fun bar() {
      B.foo()
    }
}

*
参考*
《Programming Kotlin》Stephen Samuel ,Stefan Bocutiu
《Kotlin in Action》Dmitry Jemerov,Svetlana Isakova

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值