news 2026/8/29 5:54:07

Kotlin类定义与使用全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 2:47:11

基于微信小程序的养老服务平台系统毕业设计项目源码

题目简介 在人口老龄化加剧、养老服务需求精细化的背景下&#xff0c;传统养老服务存在 “资源对接不畅、服务标准不统一、安全监护滞后” 的痛点。基于微信小程序构建的养老服务平台系统&#xff0c;适配平台管理员、养老机构、服务人员、老年人及家属等角色&#xff0c;实现服…

作者头像 李华
网站建设 2026/8/28 7:08:11

第九课Open3D点云数据处理:直通滤波

1 算法原理 2 代码实现 2.1 提取滤波后点云和噪声点云 2.2 优化后的代码 直通滤波&#xff08;AABB包围盒法&#xff09; 1 算法原理 2 AABB法直通滤波 2.1 X轴方向的直通滤波 2.2 Y轴方向的直通滤波 2.3 Z轴方向的直通滤波 2.4 函数封装 pass_through_by_AABB(cloud…

作者头像 李华
网站建设 2026/8/27 3:17:30

第十一课Open3D点云数据处理:中值滤波

1 中值滤波原理 2 与均值滤波对比 3 中值滤波代码实现 3.1 代码行实现 3.2 将中值滤波的实现封装到函数 pointCloud_median_filter() 中 1 中值滤波原理 点云中值滤波是将空间中每个点的值替换为其邻域点值的中位数。具体来说&#xff0c;对于给定点云中的每个点&#xff…

作者头像 李华
网站建设 2026/8/28 10:49:18

【课程设计/毕业设计】基于python的人工智能 人脸识别系统设计与实现

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/8/27 3:10:28

风控不是算账,是“盯人”——聊聊 CEP 在风控与监控里的那些真本事

风控不是算账&#xff0c;是“盯人”——聊聊 CEP 在风控与监控里的那些真本事 大家好&#xff0c;我是 Echo_Wish。 这些年做大数据、做风控、做监控系统&#xff0c;越做越有一个强烈的感受&#xff1a;很多系统不是“算得不够准”&#xff0c;而是“看得不够快、不够懂事”。…

作者头像 李华
网站建设 2026/8/27 3:49:18

Agentic AI合规经验:提示工程架构师如何打造个人品牌?

Agentic AI合规时代,提示工程架构师如何用“技术+信任”打造个人品牌? 摘要/引言:当AI从“工具”变成“智能体”,提示工程师的品牌焦虑该怎么解? 凌晨3点,小张盯着电脑屏幕上的Agentic AI合规审计报告,揉了揉发涩的眼睛。作为某互联网公司的提示工程架构师,他上周刚上…

作者头像 李华