1. 类与对象
介绍
-
类:类是对象的蓝图或模板,它定义了对象的属性和方法。
-
对象:对象是类的实例,具有类的属性和方法。
使用
|
// 定义一个类 |
|
class Person { |
|
var name: String = "" |
|
var age: Int = 0 |
|
|
|
// 方法 |
|
fun introduce() { |
|
println("Hello, my name is $name and I'm $age years old.") |
|
} |
|
} |
|
|
|
// 创建一个对象 |
|
val person = Person() |
|
person.name = "Alice" |
|
person.age = 30 |
|
person.introduce() // 输出:Hello, my name is Alice and I'm 30 years old. |
2. 继承与构造函数
继承介绍
- 继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。
构造函数介绍
- 构造函数用于初始化对象的状态。在 Kotlin 中,主构造函数是类头的一部分,而辅助构造函数(如果有)则使用
constructor
关键字定义。
使用
|
// 父类 |
|
open class Animal { |
|
open fun sound() { |
|
println("The animal makes a sound") |
|
} |
|
} |
|
|
|
// 子类 |
|
class Dog : Animal() { // 继承自 Animal |
|
override fun sound() { // 重写父类方法 |
|
println("The dog barks") |
|
} |
|
|
|
init { // 初始化块,类似于构造函数中的代码 |
|
println("Dog is initializing") |
|
} |
|
|
|
// 辅助构造函数 |
|
constructor(name: String) : this() { // 调用主构造函数 |
|
println("Dog's name is $name") |
|
} |
|
} |
|
|
|
val dog = Dog("Buddy") // 输出:Dog is initializing 和 Dog's name is Buddy |
|
dog.sound() // 输出:The dog barks |
3. 接口
介绍
- 接口定义了一组方法的规范,但不提供这些方法的实现。类可以实现一个或多个接口,从而承诺提供这些方法的实现。
使用
|
// 定义一个接口 |
|
interface Shape { |
|
fun draw() |
|
} |
|
|
|
// 实现接口的类 |
|
class Circle : Shape { |
|
override fun draw() { |
|
println("Drawing a circle") |
|
} |
|
} |
|
|
|
val shape: Shape = Circle() // 使用接口作为类型引用实现类 |
|
shape.draw() // 输出:Drawing a circle |
4. 数据类
介绍
- 数据类主要用于存储数据,它们的主要目的是提供一种简洁的方式来创建只包含数据的类。Kotlin 会自动为数据类生成一些常用方法,如
equals()
, hashCode()
, 和 toString()
。
使用
|
data class PersonData(val name: String, val age: Int) |
|
|
|
val personData = PersonData("Bob", 25) |
|
println(personData) // 输出:PersonData(name=Bob, age=25) |
5. 单例类
介绍
- 单例类是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。
使用
|
object Singleton { |
|
init { |
|
println("Singleton is created") |
|
} |
|
|
|
fun doSomething() { |
|
println("Singleton is doing something") |
|
} |
|
} |
|
|
|
// 访问单例对象的方法 |
|
Singleton.doSomething() // 输出:Singleton is doing something |
在 Kotlin 中,使用 object
关键字可以直接声明一个单例对象。这个对象在第一次被访问时创建,并且之后所有的访问都会返回这个唯一的实例。