跳转至

科特林界面

原文:https://www.geeksforgeeks.org/kotlin-interfaces/

接口是 Kotlin 提供的自定义类型,不能直接实例化。相反,这些定义了实现类型必须遵循的行为形式。使用接口,您可以定义一组属性和方法,具体类型必须遵循和实现这些属性和方法。

创建接口–

Kotlin 中的接口定义以接口关键字开始,后面是接口名称,后面是花括号,接口成员位于花括号内。不同的是,成员没有自己的定义。这些定义将由符合要求的类型提供。

示例:

interface Vehicle()
{
  fun start()
  fun stop()
}

实现接口–

接口可以由类或对象实现。实现接口时,一致性类型必须为其所有成员提供定义。要实现一个接口,自定义类型的名称后跟一个冒号和要实现的接口的名称。

class Car: Vehicle

演示柯特林界面的示例–

interface Vehicle {
    fun start()
    fun stop()
}

class Car : Vehicle {
    override fun start()
    {
        println("Car started")
    }

    override fun stop()
    {
        println("Car stopped")
    }
}

fun main()
{
    val obj = Car()
    obj.start()
    obj.stop()
}

输出:

Car started
Car stopped

说明: 在本程序中,界面 Vehicle 声明了 start()stop() 两种方法,需要进行覆盖。类 Car 使用类文字语法实现接口,并使用 override 关键字覆盖两种方法。最后,主函数创建一个 Car 类的对象,并调用这两个方法。

默认值和默认方法–

接口中的方法可以有默认的参数值。如果在函数调用时未提供参数值,则使用默认值。此外,这些方法可以有默认实现。这些用于方法被而不是覆盖的情况。

演示默认值和默认方法的示例–

interface FirstInterface {
    fun add(a: Int, b: Int = 5)
    fun print()
    {
        println("This is a default method defined in the interface")
    }
}
class InterfaceDemo : FirstInterface {
    override fun add(a: Int, b: Int)
    {
        val x = a + b
        println("Sum is $x")
    }

    override fun print()
    {
        super.print()
        println("It has been overridden")
    }
}

fun main()
{
    val obj = InterfaceDemo()
    println(obj.add(5))
    obj.print()
}

输出:

Sum is 10
This is a default method defined in the interface
It has been overridden

说明: 在上面的程序中, FirstInterface 定义了两种方法add()和print()。 add() 方法有两个参数,其中一个参数的默认值为 5。此外, print() 方法是默认实现。因此,当类 InterfaceDemo 实现接口时,它会覆盖这两个方法,并使用 super 关键字调用 print()的默认实现。此外,在 main 函数中,调用 add 方法时只指定了一个参数,因为第二个参数被赋予了默认值。

界面中的属性–

就像方法一样,接口也可以包含属性。然而,由于接口没有状态,它们不能被实例化,所以没有后备字段来保存它们的值。因此,接口中的字段要么是抽象的,要么是提供了一个实现。

演示界面属性的示例–

interface InterfaceProperties {
    val a : Int
    val b : String
        get() = "Hello"
}

class PropertiesDemo : InterfaceProperties {
    override val a : Int = 5000
    override val b : String = "Property Overridden"
}

fun main()
{
    val x = PropertiesDemo()
    println(x.a)
    println(x.b)
}

输出:

5000
Property Overridden

说明: 在上面的程序中, InterfaceProperties 定义了两个属性 a,a 为整数,b 为 String 类型,a 为 getter 。类属性演示实现接口属性并覆盖这两个属性,为它们提供值。main 函数创建类的对象,并使用点语法访问属性。

接口中的继承–

Kotlin 中的接口也可以继承其他接口。当一个接口扩展另一个接口时,它可以添加自己的属性和方法,实现类型必须为两个接口中的所有属性和方法提供定义。一个接口可以继承多个接口。

演示接口继承的示例–

interface Dimensions {
    val length : Double
    val breadth : Double
}

interface CalculateParameters : Dimensions {
    fun area()
    fun perimeter()
}

class XYZ : CalculateParameters {
    override val length : Double
        get() = 10.0
    override val breadth : Double
        get()= 15.0

    override fun area()
    {
        println("Area is ${length * breadth}")
    }

    override fun perimeter()
    {
        println("Perimeter is ${2*(length+breadth)}")
    }
}

fun main()
{
    val obj = XYZ()
    obj.area()
    obj.perimeter()
}

输出:

Area is 150.0
Perimeter is 50.0

说明: 在程序中,界面维度定义了两个属性长度宽度。界面计算参数继承了维度,增加了area()perimeter()两种方法。类 XYZ 实现计算参数并覆盖属性和方法,然后在主函数中调用。

多接口实现–

由于 Kotlin 中的类遵循单一继承的概念,即每个类只能继承一个类,但是,在接口的情况下,一个类支持多重继承,也称为 Kotlin 中的多重一致性。一个类可以实现多个接口,前提是它为接口的所有成员提供一个定义。

演示多接口实现的示例–

interface InterfaceProperties {
    val a : Int
    val b : String
        get() = "Hello"
}

interface InterfaceMethods {
    fun description()
}

class MultipleInterface : InterfaceProperties, InterfaceMethods {
    override val a : Int
        get() = 50

    override fun description()
    {
        println("Multiple Interfaces implemented")
    }
}
fun main()
{
    val obj = MultipleInterface()
    obj.description()
}

输出:

Multiple Interfaces implemented

说明: 在程序中定义了两个接口接口属性接口方法。这些接口由类 MultipleInterface 实现,然后在主函数中调用方法。



回到顶部