Kotlin——面向对象编程

定义类

如果将open和abstract两个修饰符放在一起使用,编译器会发出警告,open是Kotlin新引入的修饰符,open是final的反义词,用于修饰一个类、方法、或属性,表明类可派生子类、方法或属性可被重写

一个Kotlin类可以有01个主构造器和0N个次构造器

中缀表达式

可以使用infix修饰方法,这样就表示中缀表达式------但是infix方法只能有一个参数

kotlin 复制代码
fun main() {
    var origin = Apple(2.4)
    var ap = origin add Apple(3.3)
    println(ap)
    origin drop Apple(1.1)
    println(ap)
}
class Apple(weight:Double){
    var weight = weight
    override fun toString(): String {
        return "Apple(weight=$weight)"
    }
    infix fun add(other:Apple):ApplePack{
        return ApplePack(this.weight+other.weight)
    }
    infix fun drop(other:Apple):ApplePack{
        return ApplePack(this.weight-other.weight)
    }

}
class ApplePack(weight: Double){
    var weight= weight
    override fun toString(): String {
        return "ApplePack(weight=$weight)"
    }

}

componentN方法与解构

Kotlin允许将一个对象的N个属性"解构"给多个变量,写法如下

如果希望将对象解构给多个变量,那么就必须为该对象的类定义componentN()方法。程序希望将对象解构给几个变量,就需要为该类定义几个componentN()方法,且该方法需要使用operator修饰

kotlin 复制代码
fun main() {
    var user = User("yeeku","668899",29)
    //将User对象解构给2个变量
    //只利用user对象的component1()和componet2()方法
    var (name,pass:String) =user
    println(name)
    println(pass)
    //将User对象解构给3个变量
    //利用user对象的component1()、component2()方法
    var(name2,pass2,age)=user
    println(name2)
    println(pass2)
    println(age)
}
class User(name: String ,pass:String,age:Int){
    var name=name
    var pass =pass
    var age = age
    //定义operator修饰的componentN方法,用于解构
    operator fun component1() :String{
        return this.name
    }
    operator fun component2() :String{
        return this.pass
    }
    operator fun component3() :Int{
        return this.age
    }
}

在某些时候程序希望解构的对象后面几个componentN()方法的返回值、忽略前几个componentN()方法的返回值、此时可通过下划线(_)来占位。例如如下代码

kotlin 复制代码
    var (_,pass3,age2)=user
    println(pass3)
    println(age2)

除此之外也可以使用这种解构的方法便利map

kotlin 复制代码
for((key,value) in map){
//使用key、value
}
相关推荐
带娃的IT创业者11 分钟前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
happy_0x3f20 分钟前
前端应用的离线暂停更新策略
开发语言·前端·php
你驴我1 小时前
WhatsApp 消息撤回与编辑的幂等性设计实践
java·服务器·前端·后端·python
新中地GIS开发老师1 小时前
零基础WebGIS开发入门 | GeoJSON数据持久化
前端·javascript·gis·webgis·三维gis开发
blns_yxl2 小时前
正则驱动实时表单验证(HTML+CSS+JS+正则)
javascript·css·html
sunywz2 小时前
【c#】 Web Deploy一键发布,IIS部署全流程
开发语言·前端·c#
宁&沉沦2 小时前
Chrome 扩展 Manifest 字段版本支持一览(全量)
前端·后端·编辑器
乖孩子2 小时前
Service Worker + IndexedDB 实践
前端
浮生望2 小时前
BFF架构实战:用Express+SSE为Vue3搭建安全的流式对话中间层
前端
Quz3 小时前
QML 与 JavaScript 交互方式:内联函数、外部文件、信号槽与工作线程
javascript·qt