当前位置: 首页 > news >正文

Kotlin类定义与使用全指南

在 Kotlin 里,class是定义“类型”的关键字,相当于“模板/蓝图”,通过它可以创建对象(实例)。下面按常用程度,从浅到深讲一遍。


1. 最基础的类定义

classSmartDevice{funturnOn(){println("Device is on")}}

使用:

valdevice=SmartDevice()// 创建实例device.turnOn()// 调用成员函数
  • class SmartDevice:定义了一个名为SmartDevice的类。
  • SmartDevice():调用构造函数创建对象。

2. 构造函数(Constructor)

2.1 主构造函数(primary constructor)

classSmartDevice(valname:String,varisOn:Boolean)

等价于:

classSmartDevice(valname:String,// 只读属性varisOn:Boolean// 可变属性){// 这里可以继续写函数、额外属性}

使用:

valdevice=SmartDevice("TV",false)println(device.name)// TVdevice.isOn=true

要点:

  • class名后面的括号里的是“主构造函数”的参数。
  • 前面加上val/var,就会自动生成属性,不需要再在类体内声明。

2.2 有初始化逻辑的构造函数

classSmartDevice(valname:String){varisOn:Booleaninit{// init 代码块在构造时执行println("Initializing device:$name")isOn=false}}

init代码块在对象创建时按顺序执行,可做检查、日志等。

2.3 次构造函数(secondary constructor)

现在使用较少,只在需要多个不同构建方式时使用:

classSmartDevice(valname:String,varisOn:Boolean){constructor(name:String):this(name,false){// 额外初始化逻辑}}

3. 属性(properties)

classSmartDevice(valname:String,// 只读属性:外部只能读varisOn:Boolean// 可读可写属性){varvolume:Int=0// 普通属性}
  • val:只读(类似 Java 的final字段引用)。
  • var:可变。

可以自定义 getter / setter:

varvolume:Int=0set(value){field=value.coerceIn(0,100)// 限制在 0..100}

field是该属性的“幕后字段”。


4. 成员函数(methods)

classSmartDevice(valname:String){varisOn:Boolean=falsefunturnOn(){isOn=trueprintln("$nameis ON")}funturnOff(){isOn=falseprintln("$nameis OFF")}}
  • 类内部可以使用其他成员(isOnturnOff()等)。
  • 在类内部调用本类方法时可以省略this.

5. 继承(inheritance)

默认类是final(不能被继承)。要允许被继承,需要open

openclassSmartDevice(valname:String){openfunturnOn(){println("$nameis ON")}}

子类使用:继承,并在构造时调用父类构造函数:

classSmartTvDevice(name:String,valchannel:Int):SmartDevice(name){overridefunturnOn(){println("Turning on TV at channel$channel")super.turnOn()}}

使用:

valtv=SmartTvDevice("Living Room TV",5)tv.turnOn()

6. 抽象类和接口

6.1 抽象类abstract

abstractclassSmartDevice(valname:String){abstractfunturnOn()abstractfunturnOff()}
  • 不能直接实例化。
  • 子类必须实现抽象函数:
classSmartTvDevice(name:String):SmartDevice(name){overridefunturnOn(){...}overridefunturnOff(){...}}

6.2 接口interface

interfaceSwitchable{funturnOn()funturnOff()}classSmartLamp:Switchable{overridefunturnOn(){...}overridefunturnOff(){...}}

一个类可以实现多个接口。


7. 数据类data class

用于保存数据的“值类型”:

dataclassUser(valid:Int,valname:String)

自动生成:

  • toString()
  • equals()/hashCode()
  • copy()
  • componentN()(支持解构)

使用:

valuser1=User(1,"Tom")valuser2=user1.copy(name="Jerry")println(user1)// User(id=1, name=Tom)println(user2==user1)// false(内容不同)

8. 单例object

objectDeviceManager{valdevices=mutableListOf<SmartDevice>()funadd(device:SmartDevice){devices.add(device)}}
  • object定义的是单例:全局只有一个实例,直接通过DeviceManager.add(...)使用。

9. 内部类和嵌套类

classOuter{privatevala=1classNested{funfoo()=2// 不访问 Outer.a}innerclassInner{funfoo()=a// 可以访问外部类实例的成员}}
  • class Nested:静态嵌套类,不持有外部类实例。
  • inner class:内部类,持有外部类实例引用,可以访问外部成员。

10. 可见性修饰符(访问控制)

  • public(默认):任何地方都能访问。
  • internal:同一模块内可访问。
  • protected:类及其子类中可访问。
  • private:当前文件或当前类内部可访问。

示例:

classSmartDevice{privatevarsecretId:String="xxx"// 外部看不到protectedfunlog(){...}// 只有子类看得到}

总结记忆

如果你刚入门 Kotlin,先记住几条常用规则:

  1. 普通类class Foo { ... },用Foo()创建实例。

  2. 构造 + 属性最常用写法

    classFoo(vala:Int,varb:String)
  3. 继承要加open/abstract,重写要加override

  4. 只存数据就用data class

  5. 需要全局唯一就用object

  6. 类内部函数互相调用,可以直接写turnOff(),等价this.turnOff()

http://www.jsqmd.com/news/194772/

相关文章:

  • 基于Java+SpringBoot的外卖系统(源码+lw+部署文档+讲解等)
  • 深度测评 8个一键生成论文工具:本科生毕业论文痛点全解析
  • Leetcode 138. 随机链表的复制 (Day 12)
  • 基于微信小程序的养老服务平台系统毕业设计项目源码
  • 基于大数据挖掘技术的台风灾害预测系统(源码+lw+部署文档+讲解等)
  • springboot基于大数据的购物平台用户行为分析vue
  • 医疗健康领域的大数据运营:精准医疗的数据支撑
  • 基于Android的全民健身App设计与实现(源码+lw+部署文档+讲解等)
  • ACPI!ACPIBuildProcessDevicePhaseAdrOrHid函数中的acpi!ACPIGet--ACPI中心函数完全调试分析--特别重要
  • 全网最全专科生必备AI论文网站TOP9测评
  • 深度学习毕设项目推荐-基于python的人脸识别系统设计与实现
  • 基于Android的宠物社区app设计与实现(源码+lw+部署文档+讲解等)
  • springboot基于javaweb的大学生兼职管理系统vue签约
  • 基于Java+SpringBoot的零售与仓储管理系统(源码+lw+部署文档+讲解等)
  • springbootjava心理咨询vue
  • 数据仓库与Apache Hive - 努力-
  • gis的gdb/mdb数据批量导出excel报表(以林地可研附表为例)
  • springboot基于地图的智慧旅游景点推荐一体化服务系统vue
  • 谷歌47.5亿美元收购数据中心电力公司应对AI需求
  • AI一周大事盘点(2025年12月28日~2026年1月3日)
  • 新一代前端框架深度解析:编译时优化、粒度更新与无序列化渲染 - 实践
  • 深度学习计算机毕设之基于python的人脸识别系统设计与实现机器学习
  • 终端浏览器新突破:支持完整图形和现代功能
  • Day-00004
  • 英伟达AI帝国:揭秘其重要创业投资组合
  • 你的专属知识大脑:访答知识库
  • Java小白面试实录:从Spring Boot到微服务架构的技术探讨
  • 英语_阅读_ChatGpT: a smart AI chatbot_待读
  • 前端考察【底层原理与浏览器内核】-浏览器渲染流水线
  • 毕业生必备:8个免费AI论文生成器,一键极速搞定毕业期刊职称论文!