源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Kotlin 基础教程之类、对象、接口

  • 时间:2022-01-04 19:43 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Kotlin 基础教程之类、对象、接口
[b]Kotlin 基础教程之类、对象、接口[/b] [b]Kotlin中类、接口相关概念与Java一样,包括类名、属性、方法、继承等,如下示例:[/b]
interface A {
  fun bar()
  fun foo() {
  // 可选方法体
  }
}

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

[b]class[/b] 构造器 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
  }
}
[b]类实例化[/b] Kotlin 没有 new 关键字
val persion = Persion("jason")
[b]继承 [/b] Kotlin的继承概念和Java一样,”类名: 超类“ 冒号表示继承。 与Java的Object相对,Kotlin也有一个这样的Any类,类默认继承Any。 与Java的final相反,Kotlin类默认是final的,允许被继承的类,需要加 open 修饰。
open class Base {
  open fun v() {...}
  fun nv() {...} // can't be override
}
[b]方法和属性的覆盖[/b] 方法的覆盖和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
}

[b]抽象类[/b] 类本身, 或类中的部分成员, 都可以声明为 abstract 的, 抽象类不必标识 open。
abstract class Base {
  abstract fun v()
}
同伴对象 Kotlin 的类没有静态方法, 大多数情况下, 建议使用包级函数(packagelevel function)替代, 或者使用同伴对象, 达到静态方法效果
class Foo {

companion object {
  fun v() {}
}
}

[b]interface[/b] Kotlin 的接口和Java差不多,但是接口的属性不一样,Kotlin接口中的属性是抽象的。
interface A {
  val x: Int
}

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

[b]object[/b] Kotlin 没有静态类, 可以用object实现静态类的效果。
object B {
  fun foo() {
    // do something
  }
}

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部