Kotlin 接口

2024 年 8 月 29 日 | 阅读 3 分钟

接口是类的蓝图。Kotlin 接口类似于 Java 8。 它包含抽象方法声明以及方法的实现。

定义接口

接口使用关键字 interface 定义。 例如

仅声明而没有方法体的方法, 默认为抽象方法。

为什么使用 Kotlin 接口?

以下是使用接口的原因

  • 使用接口支持多重继承的功能。
  • 它可用于实现松耦合。
  • 它用于实现抽象。

子类仅扩展一个超类,但实现多个接口。 父类或接口的实现使用 (:) 运算符在子类中完成。

实现接口

在此示例中,我们在 InterfaceImp 类中实现了 MyInterface 接口。 InterfaceImp 类提供了在 MyInterface 接口中声明的属性 id抽象方法 absMethod() 的实现。

输出

Calling overriding id value = 101
MyInterface doing some work
Implementing abstract method..

实现多个接口

我们可以在同一个类中实现不同接口的多个抽象方法。 必须在子类中实现所有抽象方法。 接口的其他非抽象方法可以从派生类中调用。

例如,创建两个接口 MyInterface1MyInterface2,分别带有抽象方法 doSomthing()absMethod()。 这些抽象方法在派生类 MyClass 中被覆盖。

输出

overriding doSomthing() of MyInterface1
overriding absMethod() of MyInterface2

解决具有相同方法覆盖冲突的不同接口

让我们看一个例子,其中接口 MyInterface1 和接口 MyInterface2 都包含相同的非抽象方法。 类 MyClass 提供了这些接口的实现。 使用 MyClass 的对象调用接口的方法会产生错误。

输出

Kotlin: Class 'MyClass' must override public open fun doSomthing(): Unit defined in MyInterface1 because it 
inherits multiple interface methods of it

要解决上述问题,我们需要指定我们要调用的接口的特定方法。 让我们看一个下面的例子。

在下面的示例中,两个接口 MyInterface1MyInterface2 包含两个抽象 methodsadsMethod()absMethod(name: String) 和非抽象方法 doSomthing()。 类 MyClass 实现两个接口并覆盖抽象方法 absMethod()absMethod(name: String) 。 要覆盖非抽象方法 doSomthing(),我们需要使用 super 关键字 指定带有方法的接口名称,如 super<interface_name>.methodName().

输出

MyInterface 2 doing some work
Implements absMethod() of MyInterface1
Implements absMethod(name) of MyInterface2 name is  Ashu

输出

MyInterface 1 doing some work
MyInterface 2 doing some work
MyInterface 2 absMethod
MyInterface 1 doing some work
MyInterface1 absMethod implementation