美文网首页
[Kotlin]面向对象

[Kotlin]面向对象

作者: Tsun424 | 来源:发表于2017-11-16 18:43 被阅读0次

Kotlin vs Java

  1. Kotlin中的类默认是声明为public final, 如果需要这个类有可以被继承,需要在类名前加关键字open, 同时所有能被重写的方法前也需要加open关键字
  2. 嵌套类默认不是内部类,他们不再隐式包含他们外部类的引用
  3. Kotlin用冒号:取代了Java中的extendsimplements关键字

Kotlin中的接口

Kotlin中的接口可以包含抽象方法,也可以包含非抽象方法。

定义接口

跟Java中一样,使用interface定义接口:

interface Book {
  fun open()
  fun showMe() {
    println("I am a book")
  }
}

实现接口

实现这个接口的子类必须实现抽象方法,可以继承非抽象方法的默认实现,也可以重写非抽象方法。
有一种情况子类必须重写父接口的非抽象方法:当子类实现多个接口且多个接口中有相同名字的非抽象方法。
子类调用父接口格式:`super<Book>.showMe()

修饰符

类中的四个访问修饰符

  1. final: 默认修饰符,不能被重写
  2. open:需要显式声明能够被重写
  3. abstract:只能被用在抽象类中,必须被重写
  4. override:重写父类中的成员, 默认也是open的,如果不想被子类重写,需要显式增加final修饰符

可见性修饰符

  1. 默认public
  2. protectedprivate
  3. 去除Java中的缺省包可见修饰符,增加了internal修饰符为模块可见
    注意:
1. 一个类的扩展方法不能访问该类的private和protected成员
2. 嵌套类的private成员对外部类不可见

内部类和嵌套类

嵌套类:

Kotlin嵌套类无法访问外部类实例

class Outer {
  class Nested {
  
  }
}

内部类

内部类可以方位外部类实例

class Outer {
  inner class Inner {
    fun getOuterInstance() : Outer = this@outer
  }
}

构造方法

Kotlin中构造方法分主构造方法和次构造方法,其中主构造方法定义在类体外,次构造方法定义在类内部。主构造方法最多能有一个,次构造方法可以有多个。
主构造方法样例: 如果主构造方法没有注解或者可见性说明,可以省略关键字constructor

class User constructor (name: String) {
  val localName: String
  init {
    localName = name  
  }
}

主构造简洁版:

class User(val name: String) {

}

次构造方法样例:

class User {
  constructor(name:String) {
    super(name)
  }
}

数据类

  • data关键字修饰,自动生成equals(), hashCode()和toString()方法
  • 属性建议声明为常量,可以避免很多潜在问题。通过copy()方法实现重新赋值
data class User(val name:String, val age: Int)

object关键字

  • 单例
  • 取代Java中访问static成员功能
  • 取代Java中的匿名内部类
object Book{
  val allChapters = arrayListOf<Chapter>()
  fun open() {
    println("Open the book")
  }
}

Book.allChapters.add(Chapter())
Book.open()

对象表达式

subscribeButton.setOnClickListener(object : View.OnClickListener {
 override fun onClick(v: View) {
    ...
  }
})

companion对象

一个类内部的object访问外部类的私有成员

class School {
  val type: String
  constructor (type: String) {
    this.type = type
  }
  companion object {
    fun newPrimarySchool() = School('primary')
  }
  companion object {
    fun newHighSchool() = School('high')
  }
}

密封类(Sealed Class)

  • 子类可数
  • 子类必须和父类定义在同一个文件中

相关文章

  • 第六篇:Kotlin之面向对象简单

    上篇:Kotlin之函数Lambda表达式 下篇:Kotlin之面向对象升级(一) Kotlin也支持面向对象的三...

  • kot

    #Kotlin之班门弄斧 ##面向对象 ##java和kotlin的交互 ##协程及协程框架 ## 面向对象 ...

  • 第七篇:Kotlin之面向对象升级(一)

    上篇:Kotlin之面向对象简单 本章节来介绍Kotlin面向对象的高级部分: 一. 扩展:kotlin的扩展是一...

  • [Kotlin]面向对象

    Kotlin vs Java Kotlin中的类默认是声明为public final, 如果需要这个类有可以被继承...

  • Kotlin面向对象

    准备好开发工具IDEA,注册码的获取网址:http://idea.lanyus.com/定义一个类 定义一个类和方法

  • Kotlin -面向对象

    kotlin中的类 上面代码反编译成Java的版本后,会有get方法,除此之外还有一些不同1)不可变属性成员。这是...

  • Kotlin——面向对象

    Kotlin面向对象 类和对象 Kotlin提供了定义类、属性、方法等最基本的功能。类可被认为是一种自定义的数据类...

  • kotlin从入门到看开 ₅

    layout: posttitle: "kotlin-面向对象"subtitle: "前途和...

  • 第一天

    概述: Kotlin基础面向过程面向对象接口、扩展、泛型 为什么学习Kotlin 1.Google官方指定2.简介...

  • Kotlin学习之类

    Kotlin学习之类 @(Kotlin学习) Kotlin在面向对象上具有和Java相似的特征,但是针对不同的情况...

网友评论

      本文标题:[Kotlin]面向对象

      本文链接:https://www.haomeiwen.com/subject/eldhvxtx.html