kotlin: 接口

一,功能:

① 声明与实现 : 使用 interface 关键字声明接口 , 实现时需要重写所有的抽象成员 ( 属性 / 方法 ) ;

② 接口成员 : 接口中的 正常成员属性和成员方法默认使用 open 关键字修饰 , 接口中的抽象成员属性和抽象成员方法默认使用 abstract open 关键字修饰 ;

③ 接口属性及覆盖 : 变量属性声明成抽象属性 , 常量属性可以声明成抽象属性 , 也可以添加访问器 ;

④ 接口覆盖冲突问题 : 实现类实现多个接口 , 使用 super<接口名称> 调用不同接口的正常方法 ;

二,例子

代码:

interface Person2 {
    // 提供了 name 属性 默认的 getter 实现
    val name: String
        get() = "Tom"
    val name2: String     //有访问器,子类可以不实现
        get() = "谢广坤"
    var age: Int

    // 该函数也提供了默认的实现, 子类可以不实现
    fun sayInfo() {
        println("默认信息:名字:${name2}")
    }

    // 该函数也提供了默认的实现,  子类可以不实现
    fun sayHello() {
        println("Person sayHello :")
    }

    fun sayAge()    //没有默认实现,子类需实现
}

class Student2 : Person2 {
    override var name: String = "Jerry"
        get() = field
        set(_name: String) {
            field = _name
        }
    override var age: Int = 18

    override fun sayHello() {
        super.sayHello()
        println("$name is $age years old, say hello")
    }

    override fun sayAge() {
        println("$name 今年 $age 岁")
    }
}

调用:

        //处理按钮点击事件
        binding.button1.setOnClickListener {

                var student: Student2 = Student2()
                student.sayHello()
                student.sayInfo()
                student.sayAge()
                println(student.name2)
                student.name = "富贵"
                student.sayHello()
                println("=========================")

               var student2: Person2 = Student2()
               student2.sayHello()
               student2.sayInfo()
               student2.sayAge()
               println(student2.name2)

        }

运行结果:

image

三,例子

代码:

interface A {

    fun callMe() {
        println("From interface A")
    }
}

interface B  {
    fun callMe() {
        println("From interface B")
    }
}

// 语句super<A>.callMe()调用类A的callMe()方法。
// super<B>.callMe()调用类B的callMe()方法。
class C: A, B {
    override fun callMe() {
        super<A>.callMe()
        super<B>.callMe()
    }
}

调用:

        //处理按钮点击事件
        binding.button2.setOnClickListener {

            val obj = C()
            obj.callMe()
        }

运行结果:

image

posted @ 2025-09-06 08:39  刘宏缔的架构森林  阅读(4)  评论(0)    收藏  举报