接口

Kotlin中的接口比Java 7中要强大得多。如果你使用Java 8,它们非常相似。在Kotlin中,我们可以像Java中那样使用接口。想象我们有一些动物,它们的其中一些可以飞行。这个是我们针对飞行动物的接口:

  1. interface FlyingAnimal {
  2. fun fly()
  3. }

鸟和蝙蝠都可以通过扇动翅膀的方式飞行。所以我们为它们创建两个类:

  1. class Bird : FlyingAnimal {
  2. val wings: Wings = Wings()
  3. override fun fly() = wings.move()
  4. }
  5. class Bat : FlyingAnimal {
  6. val wings: Wings = Wings()
  7. override fun fly() = wings.move()
  8. }

当两个类继承自一个接口,非常典型的是它们两者共享相同的实现。但是Java 7中的接口只能定义行为,但是不能去实现它。

Kotlin接口在某一方面它可以实现函数。它们与类唯一的不同之处是它们是无状态(stateless)的,所以属性需要子类去重写。类需要去负责保存接口属性的状态。

我们可以让接口实现fly函数:

  1. interface FlyingAnimal {
  2. val wings: Wings
  3. fun fly() = wings.move()
  4. }

就像提到的那样,类需要去重写属性:

  1. class Bird : FlyingAnimal {
  2. override val wings: Wings = Wings()
  3. }
  4. class Bat : FlyingAnimal {
  5. override val wings: Wings = Wings()
  6. }

现在鸟和蝙蝠都可以飞行了:

  1. val bird = Bird()
  2. val bat = Bat()
  3. bird.fly()
  4. bat.fly()