Kotlin学习篇(3)—— Kotlin的 类,对象,接口,object关键字

本文详细探讨了Kotlin中的类、对象、接口以及object关键字的使用。讲解了接口的实现、open/final/abstract修饰符、枚举类的声明、可见性修饰符、内部类和嵌套类的区别、类的构造函数、默认的getter和setter、自定义访问器、重写方法、类委托和object关键字的应用,如单例、伴生对象和对象表达式。通过实例解析了Kotlin中这些概念的实践应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.1 接口

interface Clickable {
   
    //抽象方法
    fun click()
    //非抽象方法
    fun showOff() = println(" i am clickable")
}


class Button : Clickable{
   

    override fun click() {
                 //在Kotlin中override修饰符是强制要求的
        TODO("Not yet implemented")
    }

    override fun showOff() {
   
        super.showOff()
    }

}

如上为接口的定义和它的实现类

如果一个类实现了两个接口,并且两个接口中有相同的方法(无论是抽象方法还是非抽象方法),这时必须在类中显式实现这个方法。

如下:

interface Clickable {
   
    //抽象方法
    fun click()
    //非抽象方法
    fun showOff() = println(" i am clickable")
}

interface Focusable {
   
    
    //非抽象方法
    fun showOff() = println(" i am Focusable")
}
class Button : Clickable,Focusable{
   

    override fun click() {
                 //在Kotlin中override修饰符是强制要求的
       println("in click")
    }

    override fun showOff() {
   			//此时必须显式实现此方法,否则编译错误。
        super<Focusable>.showOff()		//使用尖括号加上父类型名字的“super”表面你想要调用哪一个父类的方法
    }

}

注意:

  • Kotlin并不支持接口中的默认方法,它会把每个带默认方法的接口编译为一个普通接口和一个将方法体作为静态函数的类的结合体。接口中只包含声明,类中包含了以静态方法存在的所有实现
  • java中接口中不能定义非抽象方法

3.2 open,final和abstract修饰符:默认为final

注意:没有特别需要在子类中被重写的类和方法应该被显式的标注为final

open:

  • 如果类用open修饰符标识:其他类可以继承它
  • 如果方法用open修饰符标识:可以在子类中重写它。
  • 如果重写了一个基类或者接口的成员,重写的成员同样默认是open的
open class RichButton : Clickable{
   

    fun disable(){
   }         // 默认为final,子类不能重写
    open fun animate(){
   }    // 子类可以重写

    override fun click() {
        // 如果重写了一个基类或者接口的成员,重写的成员同样默认是open的
        TODO("Not yet implemented")
    }

}

abstract:

  • 抽象类:这种类不能被实例化。类中包含一些没有实现并且必须在子类重写的抽象成员。抽象成员始终是open的,所以不需要显式的使用open修饰符。
  • 抽象方法:在该类中不实现,必须被子类重写。
  • 有抽象方法的类一定是的抽象类,但抽象方法不一定在抽象类中。接口中的方法都是抽象方法
  • 抽象类中的非抽象函数并不是默认open的,但是可以标注为open
abstract class Animated{
           //抽象类

    abstract fun animate()		//抽象方法

    open fun openFun(){
   }		//抽象类中标注为open的非抽象方法

}

类中的修饰符总结

修饰符 相关成员 注解
final 不能被重写 类中成员默认使用
open 可以被重写 需要明确的表明
abstract 必须被重写 只能在抽象类中使用;抽象成员不能有实现
override 重写父类或接口中的成员 如果没有使用final表明,重写的成员默认是开放的

3.3 声明枚举类

枚举类,enum在Kotlin中是一个软关键字:只有当它出现在class前面时才有特殊的意义


enum class Color {
   
    RED,ORANGE,YELLOW,GREEN,BLUE,INDIGO,VIOLET
}
enum class Colorful(val r : Int, val g : Int, val b : Int){
   
    RED(255,0,0),
    ORANGE(255,165,0),
    YELLOW(255,255,0),
    GREEN(0,255,0),
    BLUE(0,0,255),
    INDIGO(75,0,130),
    VIOLET(238,130,238);                //这里必须要有';'

    fun rgb() = (r * 256 + g) * 256 + b         //给枚举类定义一个方法
}

注意:上面的例子是Kotlin语法中唯一使用分号的地方

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值