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

所属分类: 软件编程 / java 阅读数: 29
收藏 0 赞 0 分享

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()
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

Java的面向对象编程基本概念学习笔记整理

这篇文章主要介绍了Java的面向对象编程基本概念学习笔记整理,包括类与方法以及多态等支持面向对象语言中的重要特点,需要的朋友可以参考下
收藏 0 赞 0 分享

Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法

这篇文章主要介绍了Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

基于Java实现杨辉三角 LeetCode Pascal's Triangle

这篇文章主要介绍了基于Java实现杨辉三角 LeetCode Pascal's Triangle的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java中Spring获取bean方法小结

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢?下面通过本文给大家介绍Java中Spring获取bean方法小结,对spring获取bean方法相关知识感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

如何计算Java对象占用了多少空间?

在Java中没有sizeof运算符,所以没办法知道一个对象到底占用了多大的空间,但是在分配对象的时候会有一些基本的规则,我们根据这些规则大致能判断出来对象大小,需要的朋友可以参考下
收藏 0 赞 0 分享

剖析Java中的事件处理与异常处理机制

这篇文章主要介绍了Java中的事件处理与异常处理机制,讲解Java是如何对事件或者异常作出响应以及定义异常的一些方法,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Java的Struts2框架的结构及其数据转移方式

这篇文章主要介绍了详解Java的Struts2框架的结构及其数据转移方式,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
收藏 0 赞 0 分享

Java封装好的mail包发送电子邮件的类

本文给大家分享了2个java封装好的mail包发送电子邮件的类,并附上使用方法,小伙伴们可以根据自己的需求自由选择。
收藏 0 赞 0 分享

在Java的Struts中判断是否调用AJAX及用拦截器对其优化

这篇文章主要介绍了在Java的Struts中判断是否调用AJAX及用拦截器对其优化的方法,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
收藏 0 赞 0 分享

java多线程Future和Callable类示例分享

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。今天我们就来研究下Future和Callab
收藏 0 赞 0 分享
查看更多