Kotlin 基础语法快速回顾

张开发
2026/4/21 11:05:51 15 分钟阅读
Kotlin 基础语法快速回顾
这一篇主要先回顾下Kotlin 基础语法其实很多语法都是一通百通的语法的可读性比java强从左到右读的方式还有几大特性几本都是所有编程语言都有的。1.2 Kotlin 基础语法快速回顾1.2.1 变量声明val vs var核心概念val不可变变量类似 Java 的 finalvar可变变量// val - 不可变推荐使用valname张三// name 李四 // 编译错误val cannot be reassigned// var - 可变谨慎使用varage25age26// 正确// 类型推断valexplicitType:String明确类型valinferredType类型推断// 编译器自动推断为 String// 延迟初始化lateinitvarlazyInit:String最佳实践优先使用 val保证代码的不可变性只有在确实需要修改时才使用 var不可变性让代码更安全更容易并发处理1.2.2 函数定义与调用基本语法// 标准函数定义fungreet(name:String):String{return你好$name}// 表达式体函数单行函数fungreetShort(name:String):String你好$name// 省略返回类型的表达式体函数类型推断fungreetInfer(name:String)你好$name// 默认参数值funcreateUser(name:String,age:Int18,// 默认值email:String):User{returnUser(name,age,email)}// 调用函数valuser1createUser(张三)valuser2createUser(李四,25)valuser3createUser(王五,30,wangexample.com)// 命名参数提高可读性valuser4createUser(name赵六,emailzhaoexample.com// age 使用默认值)可变参数Varargs// 可变参数funprintAll(varargmessages:String){for(messageinmessages){println(message)}}// 调用printAll(消息1,消息2,消息3)// 解构数组valmessagesarrayOf(A,B,C)printAll(*messages)// 使用 * 操作符解构1.2.3 类与继承基础类定义// 基础类classPerson{varname:Stringvarage:Int0funintroduce(){println(我是$name今年$age岁)}}// 使用valpersonPerson()person.name张三person.age25person.introduce()主构造函数// 主构造函数classUser(valname:String,varage:Int){// init 块在构造时执行init{println(创建用户$name)}fungreet(){println(你好我是$name$age岁)}}// 使用valuserUser(李四,30)user.greet()次构造函数classUser2(valname:String){varage:Int0varemail:String// 主构造函数constructor(name:String,age:Int):this(name){this.ageage}// 次构造函数constructor(name:String,age:Int,email:String):this(name,age){this.emailemail}}继承// 父类使用 open 关键字允许继承openclassAnimal(valname:String){openfunmakeSound(){println($name发出声音)}}// 子类classDog(name:String):Animal(name){overridefunmakeSound(){println($name汪汪汪)}}classCat(name:String):Animal(name){overridefunmakeSound(){println($name喵喵喵)}}// 使用valdogDog(旺财)dog.makeSound()// 输出旺财汪汪汪valcatCat(咪咪)cat.makeSound()// 输出咪咪喵喵喵继承的关键点父类需要使用open关键字才能被继承重写的方法需要使用override关键字子类构造函数必须调用父类构造函数1.2.4 接口与抽象类接口// 接口定义interfaceClickable{funclick()funshowOff()println(我是可点击的)// 默认实现}// 实现接口classButton:Clickable{overridefunclick(){println(按钮被点击)}// showOff() 使用默认实现}// 多个接口实现interfaceFocusable{funsetFocus(b:Boolean){println(焦点设置:$b)}}classTextView:Clickable,Focusable{overridefunclick(){println(文本框被点击)}// setFocus() 使用默认实现}抽象类// 抽象类abstractclassShape{// 抽象方法abstractfunarea():Double// 具体方法fundescribe(){println(这是一个形状面积是${area()})}}// 继承抽象类classCircle(privatevalradius:Double):Shape(){overridefunarea():Double{returnMath.PI*radius*radius}}classRectangle(privatevalwidth:Double,privatevalheight:Double):Shape(){overridefunarea():Double{returnwidth*height}}// 使用valcircleCircle(5.0)circle.describe()// 输出这是一个形状面积是 78.53981633974483valrectangleRectangle(4.0,5.0)rectangle.describe()// 输出这是一个形状面积是 20.0接口 vs 抽象类选择指南接口定义行为契约支持多重实现抽象类定义模板和共享状态单继承

更多文章