【kotlin学习过程】kotlin面向对象

本文介绍了Kotlin中的类与对象概念,包括类的声明、封装、继承、抽象类、接口、委托、单例模式、枚举及密封类等内容。通过实例讲解了这些概念的基本用法。

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

继学习完kotlin的基础知识后就是类与对象了。


  1. Kotlin 中使用关键字 class 声明类
class Human(var name:String){
    fun eat(){
        println("$name 在吃饭")
    }
}
fun main(args:Array<String>){
    var man= Human("小强")
    man.eat()
}

2.封装

  • 隐藏内部实现的细节
  • 隐藏内部实现的细节就是封装
  • 封装就是隐藏内部实现的细节

    封装在fun函数前加个private 关键字就ok

3.继承
在 Kotlin 中所有类都有一个共同的超类 Any,这对于没有超类型声明的类是默认超类
要声明一个显式的超类型,我们把类型放到类头的冒号之后
父类必须是open的。如果父类允许子类重写方法的话也需要在fun前面加open,子类重写父类方法需要加override在fun前面

open class Base(p: Int){
    open fun v(){}
    fun nv(){}
}

class Derived(p: Int) : Base(p){
    override fun v(){}
    //override fun nv(){} 父类不允许子类重写nv方法
}

4.抽象类和继承

abstract class Human(var name:String){
    abstract fun eat()
}

class Man(name:String):Human(name){
    override fun eat(){
        println("男人在吃饭")
    }
}
class Woman(name:String):Human(name){
    override fun eat(){
        println("女人在吃饭")
    }
}

5.接口
Kotlin 的接口与 Java 8 类似,既包含抽象方法的声明,也包含实现。与抽象类不同的是,接口无法保存状态。它可以有属性但必须声明为抽象或提供访问器实现。

使用关键字 interface 来定义接口

interface MyInterface {
    fun bar()
    fun foo() {
      // 可选的方法体
    }
}
class Child : MyInterface {
    override fun bar() {
        // 方法体
    }
}

需要理解
**接口是事物的能力
抽象类是事物的本质**

6.委托
委托模式已经证明是实现继承的一个很好的替代方式, 而 Kotlin 可以零样板代码地原生支持它。 类 Derived 可以继承一个接口 Base,并将其所有共有的方法委托给一个指定的对象:

interface Base {
    fun print()
}

class BaseImpl(val x: Int) : Base {
    override fun print() { print(x) }
}

class Derived(b: Base) : Base by b

fun main(args: Array<String>) {
    val b = BaseImpl(10)
    Derived(b).print() // 输出 10
}

Derived 的超类型列表中的 by-子句表示 b 将会在 Derived 中内部存储。 并且编译器将生成转发给 b 的所有 Base 的方法。

请注意,覆盖会以你所期望的方式工作:编译器会使用你的 override 实现取代委托对象中的实现。如果我们为 Derived 添加 override fun print() { print(“abc”) },该程序会输出“abc”而不是“10”。

7.单例模式
把class声名改成object就可以直接实现单例模式

8.枚举
枚举类的最基本的用法是实现类型安全的枚举

enum class Week{
    Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
//Week.Monday

9.印章(密封)类
印章类就是指定个数个子类的类型,而不能有任何其他类型。

sealed class Child{
    class Son:Child()
    class Daughter:Child()
    fun too(){
        println("xxxxx")
    }
}
fun main(args: Array<String>) {
      var first:Child = Child.Son()
      var second:Child = Child.Daughter()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值