本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtube 频道。另外,想追踪更多相关技术资讯,欢迎到 脸书粉丝专页 按赞追踪喔~
今天要跟大家介绍 Kotlin 语法的内容大纲:
我们会将相关功能放在一个类别当中,就像生活中用的计算机一样。以这次为例,我们将加、减、乘、除四个数学计算的功能,放在一个计算机类别当中,当别人或是自己下次要使用,不用再重覆造轮子,只要呼叫这个类别,使用里面的方法即可。
类别里,加入四个方法,分别是加、减、乘、除。
class Calc {
fun sum(x: Int, y: Int) {
println(x + y)//加法运算
}
fun substract(x: Int, y: Int) {
println(x - y)//减法运算
}
fun multiply(x: Int, y: Int) {
println(x * y) //乘法运算
}
fun divide(x: Int, y: Int) {
println(x / y)//除法运算
}
}
我们会将类别实体化出来成为一个物件,透过这个物件来访问类别里面定义的属性与方法。
fun main() {
//实体化
val calc = Calc()
calc.sum(1, 1) //2
calc.substract(1, 1)//0
calc.multiply(1, 1)//1
calc.divide(1, 1)//1
}
2
0
1
1
在 Account 类别中分别加入帐号、户名和余额三个类别属性
class Account {
//帐号
var id: String = ""
//户名
var name: String = ""
//余额
var balance: String = ""
}
fun main() {
//实体化
val account = Account()
//设定类别属性值
account.id = "123456789"
account.name = "HKT"
account.balance = "100"
//获取类别属性值
println(account.id)
println(account.name)
println(account.balance)
}
123456789
HKT
100
若不想让使用类别者直接访问属性值或是在获取与设定属性值过程中想要加工资料,则可以透过 getter 与 setter 方法。
class Account {
//户名
var name: String = ""
get() = field.toUpperCase()
set(value) {
if (value == "") {
field = "户名不能为空"
} else {
field = value
}
}
}
fun main() {
//实体化
val account = Account()
account.name = "HKT"
println(account.name)
account.name = ""
println(account.name)
}
HKT
户名不能为空
类别被实体化出来时,中间过程会先经过 init 然後 constructor ,可以将想要初始化的逻辑程序放在这里面。
class Account {
//户名
var name: String = ""
init {
println("初始化,第一层")
}
constructor() {
println("初始化,第二层")
}
}
fun main() {
//实体化
val account = Account()
account.name = "HKT"
println(account.name)}
}
初始化,第一层
初始化,第二层
HKT
父类别需加入 open 关键修饰词,才能让其他子类别继承,否成编译会报错误。
open class Person {
//户名
var name: String = ""
//地址
var address: String = ""
}
class Account : Person() {
//帐号
var id: String = ""
}
fun main() {
//实体化
val account = Account()
account.id = "123456789"
account.name = “HKT"
account.address = "台北市信义区信义路五段7号"
println(account.id)
println(account.name)
println(account.address)
}
123456789
HKT
台北市信义区信义路五段7号
父类别中的属性,若允许子类别继承後可以覆写属性,须在前方加入 open 关键修饰词,否则编译时会报错误。反过来,若不提供子类别覆写,则不需要加入open 修饰词。
open class Person {
//户名
open var name: String = ""
}
在子类别中加入 override 关键修饰词,即可以修饰父类别中的属性
class Account : Person() {
//覆写户名
override var name: String = ""
}
fun main() {
//实体化
val account = Account()
account.name = "HKT"
println(account.name)
}
HKT
父类别中的方法,若允许子类别继承後可以覆写方法,须在前方加入 open 关键修饰词,否则编译时会报错误。反过来,若不提供子类别覆写,则不需要加入open 修饰词。
open class Person {
open fun showName() {
println("HKT")
}
}
在子类别中加入 override 关键修饰词,即可以修饰父类别中的方法
class Account : Person() {
override fun showName() {
println("Kitty")
}
}
fun main() {
//实体化
val account = Account()
account.showName()
}
Kitty
可以透过介面的方式,来约定若要实作这个介面,需履约实作哪些方法。
interface PersonInterface {
fun showName()
}
若我们使用 PersonInterface 介面,但没履约实作里面的方法,编译会喷错误。
class Account : PersonInterface {
override fun showName() {
println("name: HKT")
}
}
fun main() {
//实体化
val account = Account()
account.showName()
}
name: HKT
class Account {
var id: String = ""
}
fun Account.Print() {
println("帐号: " + id)
}
fun main() {
//实体化
val account = Account()
account.id = "123456789"
account.Print()
}
帐号: 123456789
可以把「泛型」想像成是神奇宝贝当中的百变怪。当我们想要处理不论是类别或是方法的参数,想要处理各种传进来的资料类型,我们就可以使用泛型。
class Box<T>(t: T) {
var value = t
}
fun main() {
val box_int = Box(1)
println(box_int.value)
val box_string = Box("我是字串")
println(box_string.value)
}
1
我是字串
HKT 线上教室
https://tw-hkt.blogspot.com/
Freepik
https://www.freepik.com/
Kotlin docs
https://kotlinlang.org/docs/home.html
那今天【iThome 铁人赛】就介绍到这边罗~
顺带一提,KT 线上教室,脸书粉丝团,会不定期发布相关资讯,不想错过最新资讯,不要忘记来按赞,追踪喔!也欢迎大家将这篇文章分享给更多人喔。
我们明天再见罗!!!掰掰~
>>: Day 04 Azure Web App- 方便部署服务
在开发程序时,有时候想要测试一点小功能,确认说这个功能可不可以使用,如果说每次都要为了测试这点功能就...
OKR 目标影响我们的可能性与看事情的视角 OKR,目标与关键成果(Objective and Ke...
Agenda 资安宣言 测试环境与工具 前情提要 技术原理 下期预告 资安宣言 撰写本系列文章目的在...
还是一样先上图 终於来到第六点了!!!可喜可贺 看一下文件中产生Message的方法 5.5.2. ...
本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...