kotlin
支持面向对象编程,也有雷和对象的概念
要声明一个类需要使用class
关键字
kotlin
class Customer
属性(Properties)
- 可以在类名后边添加
()
,在()
里边声明属性
kotlin
class Contact(val id: Int, var email: String)
声明了不可变属性
id
和可变属性
- 可以在
()
后边添加{}
,在{}
中声明属性
kotlin
class Contact(val id: Int, var email: String) {
val category: String = ""
}
声明了不可变属性
id
、可变属性category
。category
设默认值""
建议声明不可变属性,除非在创建对象后需要修改它
()
内的一般称为头文件
在()
内声明属性时可以不使用val
和var
,但是类实例化后该属性不可见。见实例化
实例化(Create instance)
可以使用构造函数创建一个实例
默认情况下kotlin
会使用头文件中定义的参数创建一个构造函数
kotlin
fun main(){
val contact1 = Contact(1, "123@mail.com", 0)
val contact2 = Contact(2, order = 1)
println(contact1.email) // 123@mail.com
println(contact1.id) // 1
println(contact1.category) // 122
// println(contact.order) // Unresolved reference: orde
println(contact2.email) // abc@mail.com
println(contact2.id) // 2
println(contact2.category) // 122
}
访问属性(Access properties)
实例化
中contact1.email
等方式就属于访问属性
模板字符串可以拼接实例的属性,注意使用
${}
println("邮箱是${contact2.email}") //邮箱是abc@mail.com
成员方法(Member functions)
成员函数要定义在类中,调用方法和访问属性类似
kotlin
class Contact(val id: Int, var email: String = "abc@mail.com", order: Int) {
val category: String = "122"
fun printEmail() {
println("邮箱是${email}")
}
}
fun main() {
val contact = Contact(1, "123@mail.com", 0)
contact.printEmail() // 邮箱是123@mail.com
}
数据类(Data classes)
数据类和普通类相似,但是会额外生成一些成员函数,这些成员函数格式化输出格式,对比实例,复制实例等。
使用`data class``声明一个数据类
kotlin
data class User(val name: String, val id: Int)
方法 | 说明 |
---|---|
.toString() | 格式化输出实例的属性 |
.equals() or == | 对实例作比较 |
.copy() | 通过一个实例创建里一个实例 |
toString
kotlin
data class User(val name: String, val id: Int)
fun main(){
val user = User("王老吉",1)
println(user.toString()) // User(name=王老吉, id=1)
}
equals / ==
kotlin
data class User(val name: String, val id: Int)
fun main(){
val user1 = User("王老吉",1)
val user2 = User("王老吉",1)
val user3 = User("王老吉",2)
println(user1.equals(user2)) // true
println(user1 == user2) // true
println(user1.equals(user3)) // false
println(user1.equals("王老吉")) // false
}
copy
kotlin
data class User(val name: String, val id: Int)
fun main(){
val user = User("王老吉",1)
println(user.copy()) // User(name=王老吉, id=1)
println(user.copy("加多宝")) // User(name=加多宝, id=1)
println(user.copy(id=2)) // User(name=王老吉, id=2)
}
创建一个新的实例比修改原始实例更安全,因为原始实例的属性不会改变