第4章类、对象和接口

第4章类、对象和接口.png

4.1、定义类继承结构

Kotlin中的接口

  • Kotlin的接口与Java8相似:它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态

  • 使用interface关键字而不是class来声明一个Kotlin的接口

  • 声明一个简单的接口(注意:这里的override修饰符是强制要求显式写出来

    interface Clickable {
         
        fun click()
    }
    
  • 接口实现

     class Button:Clickable {
         
         override fun click() {
         
             println("i was clicked")
         }
     }
    
  • 测试

    fun main(args: Array<String>) {
         
        val btn=Button()
        btn.click()
    }
    
  • Kotlin在类名后面使用冒号来代替了Java中的extends和implements关键字

  • 和java一样,一个类可以实现多个接口,但是只能继承一个类

  • 与Java中的@Override注解类似,override修饰符用来标注被重写的父类或者接口的方法和属性。在Kotlin中使用override修饰符是强制要求的

  • 接口的方法可以有一个默认实现

    • 与Java8不同,Java8中需要你在这样的实现上标注default关键字,对于这样的方法,Kotlin没有特殊的注解

    • 只需要提供一个方法体,也就是按照正常的方法写就可以

    • 例子

      • 给Clickable接口添加一个带默认实现的方法

         interface Clickable {
                 
             fun click()
             //接口默认实现方法,和正常的实现方法写法一样
             fun showOff()= println("i'am clickable!")
         }
        
         class Button:Clickable {
                 
             override fun click() {
                 
                 println("i was clicked")
             }
         
              //该showOff方法可以重写,也可以不重写
              override fun showOff() {
                 
                super.showOff()
           }
         }
        
    • 假如有两个接口都有showOff的方法实现,Button类继承了这两个类,那会怎样

      • 例子

         interface Clickable {
                 
             fun click()
             fun showOff()= println("i'am clickable!")
         }
        
         interface Focusable {
                 
             fun setFocus(b:Boolean)=println("I ${
                   if(b) "got" else "lost"} focus.")
             fun showOff()=println("I'm focusable!")
         }
        
         class Button:Clickable,Focusable {
                 
             override fun click() {
                 
             println("i was clicked")
             }
         }
        
         fun main(args: Array<String>) {
                 
             val btn=Button()
             btn.click()
         }
        
        • IDE报红

          • Kotlin: Class ‘Button’ must override public open fun showOff(): Unit defined in 四.类对象和接口.Clickable because it inherits multiple interface methods of it

            image.png

        • Kotlin编译器强制要求你提供自己的实现,使用尖括号加上父类的名字的super表明了你想要调用哪一个父类的方法

           class Button:Clickable,Focusable {
                     
             override fun click() {
                     
               println("i was clicked")
             }
           
             override fun showOff() {
                     
               //使用尖括号加上父类的名字的super表明了你想要调用哪一个父类的方法
               super<Clickable>.showOff()
               
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值