在 Kotlin 中,定义一个类非常简单。类使用 class 关键字来声明,并且可以包含属性和方法。
class Person {
var name: String = ""
var age: Int = 0
fun introduce() {
println("我的名字是 $name,我今年 ${age} 岁。")
}
}在这个例子中,我们定义了一个名为 Person 的类,它有两个属性:name 和 age。这两个属性分别被声明为 var 类型,这意味着它们是可变的。类中还定义了一个方法 introduce(),该方法用于输出个人信息。
创建对象
创建一个类的对象也很简单。你可以通过类名后跟一对括号来创建一个对象实例。
fun main() {
val person = Person()
person.name = "张三"
person.age = 30
person.introduce()
}在这个例子中,我们创建了一个 Person 类的实例,并给它的属性赋值。然后调用了 introduce() 方法。
构造函数
Kotlin 支持主构造函数和次构造函数。主构造函数在类头定义,次构造函数则在类体内定义。
主构造函数
主构造函数通常用来初始化类的属性。它可以直接放在类名后面,也可以带有一些参数。
// www.javascriptcn.com code example
class Person(val name: String, var age: Int) {
fun introduce() {
println("我的名字是 $name,我今年 ${age} 岁。")
}
}
fun main() {
val person = Person("李四", 25)
person.introduce()
}在这个例子中,我们在类定义中直接定义了两个参数:val name 和 var age。这样当我们创建 Person 类的新实例时,就需要传入这两个参数。
次构造函数
次构造函数必须委托给主构造函数。这可以通过在次构造函数的头部使用 this 关键字来实现。
// www.javascriptcn.com code example
class Person {
var name: String = ""
var age: Int = 0
constructor(name: String, age: Int) {
this.name = name
this.age = age
}
fun introduce() {
println("我的名字是 $name,我今年 ${age} 岁。")
}
}
fun main() {
val person = Person("王五", 40)
person.introduce()
}在这个例子中,我们定义了一个次构造函数,它接受两个参数并将其分配给类的属性。
数据类
Kotlin 提供了一种特殊的数据类(data class),用于存储数据。数据类会自动生成一些方法,如 equals(), hashCode(), toString() 等。
data class User(val name: String, var age: Int)
fun main() {
val user = User("赵六", 28)
println(user) // 输出:User(name=赵六, age=28)
}在这个例子中,我们定义了一个 User 数据类,并创建了一个实例。当我们打印这个实例时,会自动调用 toString() 方法,输出格式化的字符串。
密封类
密封类用于表示受限的类继承结构。当一个值为有限几种类型之一时,密封类特别有用。
// www.javascriptcn.com code example
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
}
fun process(result: Result) {
when (result) {
is Result.Success -> println("成功:${result.data}")
is Result.Error -> println("失败:${result.message}")
}
}
fun main() {
process(Result.Success("数据加载成功"))
process(Result.Error("数据加载失败"))
}在这个例子中,我们定义了一个密封类 Result,它可以是 Success 或 Error。根据 process 函数中的结果类型,我们可以执行不同的操作。
抽象类与接口
Kotlin 支持抽象类和接口。抽象类用于定义一些通用的方法,但不提供具体的实现。接口则定义了一组方法签名,具体实现由实现该接口的类来完成。
抽象类
// www.javascriptcn.com code example
abstract class Animal {
abstract fun makeSound()
}
class Dog : Animal() {
override fun makeSound() {
println("汪!")
}
}
fun main() {
val dog = Dog()
dog.makeSound()
}在这个例子中,我们定义了一个抽象类 Animal,其中有一个抽象方法 makeSound()。然后我们创建了一个子类 Dog 来实现这个方法。
接口
// www.javascriptcn.com code example
interface Flyable {
fun fly()
}
class Bird : Flyable {
override fun fly() {
println("鸟儿飞起来了!")
}
}
fun main() {
val bird = Bird()
bird.fly()
}在这个例子中,我们定义了一个接口 Flyable,其中有一个 fly() 方法。然后我们创建了一个类 Bird 来实现这个接口。
以上就是 Kotlin 中类和对象的基础知识。通过这些概念,你可以开始构建更复杂的程序结构。