Kotlin核心编程-面向对象

1.Kotlin中的类及接口

Kotlin中的类:

  • 不可变属性成员:使用 val 在类中声明,利用 java 中 final 修饰符实现。
  • 属性默认值:除非显式地声明延迟初始化,否则需要指定属性的默认值。
  • 不同的可访问修饰符:默认是 final 全局可见。

带有属性和默认方法的接口:通过定义一个静态内部类 DefaultImpls 实现。

2.更简洁地构造类的对象

  • 构造方法默认参数
  • init语句块:可以拥有多个,从上到下顺序执行。
  • 延迟初始化:by lazy 和 lateinit

3.主从构造方法

  • 通过 constructor 方法定义了一个新的构造方法,它被称为从构造方法。相应地,在类外部定义的构造方法被称为主构造方法。
  • 每个从构造方法由两部分组成。一部分是对其他构造方法的委托,另一部分是由花括号包裹的代码块。执行顺序上会先执行委托的方法,然后执行自身代码块的逻辑。

4.限制修饰符

  • Kotlin中使用 : 来代替 extends 和 implements 关键字。
  • Kotlin中类和方法默认是不可以被继承或重写的,必须加上 open 修饰符。

5.可见性修饰符

  • Kotlin 与 Java 的默认修饰符不同,Kotlin 中是 public,而 Java 中是 default。
  • Kotlin 中有一个独特的修饰符 internal,模块内访问。
  • Kotlin 可以在一个文件内单独声明方法及常量,同样支持可见性修饰符。
  • Java 中除了内部类可以使用 private 修饰以外,其他类都不允许 private 修饰,而 Kotlin 可以。
  • Kotlin 和 Java 中的 protected 的访问范围不同,Java 中是包、类及子类可访问,而 Kotlin 中只允许类及子类。

6.解决多继承问题

  • 接口实现多继承:super
  • 内部类解决多继承:inner class
  • 使用委托代替多继承

7.数据类:data class

  • 数据类必须拥有一个构造方法,该方法至少包含一个参数;
  • 数据类构造方法的参数强制使用 var 或者 val 进行声明;
  • data class 之前不能用 abstract、oepn、sealed 或者 inner 进行修饰;
  • 在 Kotlin1.1 之后的版本可以实现接口,也可以继承类。

8.伴生对象:companion object,替代 static

“伴生”是相较于一个类而言的,意为伴随某个类的对象,它属于这个类所有,因此伴生对象跟 Java 中 static 修饰效果性质一样,全局只有一个单例。它需要声明在类的内部,在类被装载时会被初始化。

9.天生的单例:object

object 全局声明的对象只有一个,不用语法上的初始化,也不需要构造方法。

object Singleton {}

10.object表达式

object 表达式跟 Java 匿名内部类很相似,但 object 表达式可以赋值给一个变量。此外,匿名内部类只能继承一个类及实现一个接口,而 object 表达式没有这个限制。

val clickListener = object : OnClickListener {
    override fun onClick(v: View?) {}
}

你可能感兴趣的:(Kotlin核心编程-面向对象)