Kotlin 接口
接口是 Kotlin 提供的自定义类型,不能直接实例化。相反,它们定义了实现类型必须遵循的一种行为形式。使用接口,您可以定义一组属性和方法,具体类型必须遵循和实现。
创建接口 –
Kotlin 中的接口定义以interface关键字开头,后跟接口名称,然后是接口成员所在的花括号。不同之处在于成员将没有自己的定义。这些定义将由符合的类型提供。
例子:
interface Vehicle()
{
fun start()
fun stop()
}
实现接口——
接口可以由类或对象实现。实现接口时,符合类型必须为其所有成员提供定义。要实现一个接口,自定义类型的名称后跟一个冒号和要实现的接口的名称。
class Car: Vehicle
在 Kotlin 中演示接口的示例 -
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 是一个整数,b 类型是 String ,它提供了一个getter 。类PropertiesDemo实现InterfaceProperties并覆盖这两个属性,为它们提供值。函数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
解释:
在程序中,Dimensions 接口定义了两个属性length和width 。接口CalculatedParameters继承了 Dimensions 并添加了两个方法area()
和perimeter()
。类XYZ实现CalculatedParameters并覆盖属性和方法,然后在 main函数中调用。
多接口实现——
由于 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
解释:
在程序中,定义了两个接口InterfaceProperties和InterfaceMethods 。这些接口由类MultipleInterface实现,然后在 main函数中调用方法。
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。