类的定义

语法格式

  1. class Runoob { // 类名为 Runoob
  2. // 大括号内是类体构成
  3. }

类的属性

属性定义

  1. class Runoob {
  2. var name: String = ……
  3. var url: String = ……
  4. var city: String = ……
  5. }

成员函数定义

  1. class Runoob() {
  2. fun foo() { print("Foo") } // 成员函数
  3. }

属性的引用

  1. val site = Runoob() // Kotlin 中没有 new 关键字
  2. println(site.name) // 使用 . 号来引用
  3. println(site.url)

getter和setter方法

基本语法格式:

  1. var propertyName: PropertyType = property_initializer
  2. get()
  3. set()

var +变量名+ : + 变量类型 + = + 变量的默认值

这里的默认值可以不写。

这里的get()方法是用于获取变量propertyName
这里的set()方法是用于设置变量propertyName.

实例

  1. class Person {
  2. var lastName: String = "zhang"
  3. get() = field.toUpperCase() // 将变量赋值后转换为大写
  4. set
  5. var no: Int = 100
  6. get() = field // 后端变量
  7. set(value) {
  8. if (value < 10) { // 如果传入的值小于 10 返回该值
  9. field = value
  10. } else {
  11. field = -1 // 如果传入的值大于等于 10 返回 -1
  12. }
  13. }
  14. }
  15. // 测试
  16. fun main(args: Array<String>) {
  17. var person: Person = Person()
  18. // 这里是将属性lastname赋值,也就是使用了set()方法,这里没有做特殊处理只是传入
  19. person.lastName = "wang"
  20. // 这里获取lastName的时候会默认采用get()方法,会把lastName的值转换为大写输出
  21. println("lastName:${person.lastName}")
  22. // 根据set方法,传入的值小于10的时候,no的值就是传入的值9
  23. person.no = 9
  24. println("no:${person.no}")
  25. // 根据set方法,传入的值大于10的时候,no的值是-1
  26. person.no = 20
  27. println("no:${person.no}")
  28. }

注意事项

这里的field,代指的就是方法依托的属性
比如:

  1. var lastName: String = "zhang"
  2. get() = field.toUpperCase() // 将变量赋值后转换为大写
  3. set
  1. 这里的`field`代指的就是`lastName`

构造器

初始化方法

一般来讲,我们会使用init()方法作为初始化方法,这方法会再对象创建的时候自动调用。
类似于java中的构造方法

基本语法

  1. class Person constructor(firstName: String) {
  2. init {
  3. println("FirstName is ${firstName}")
  4. }
  5. }

实例

  1. class Runoob (name: String) { // 类名为 Runoob
  2. // 大括号内是类体构成
  3. var siteName = name
  4. init {
  5. println("初始化网站名: ${name}")
  6. }
  7. }
  8. fun main(args: Array<String>) {
  9. val runoob = Runoob("菜鸟教程")
  10. println(runoob.siteName)
  11. }
  1. 输出结果如下
  1. 初始化网站名: 菜鸟教程
  2. 菜鸟教程

特殊类

抽象类

也就是成员属性和方法不需要具体实现的类
一般都使用abstract关键词来标明是抽象类

  1. open class Base {
  2. open fun f() {}
  3. }
  4. abstract class Derived : Base() {
  5. override abstract fun f()
  6. }

嵌套类

也就是类里面包含了其他类。
调用格式为:外部类.嵌套类.嵌套类方法/属性

实例

  1. class Outer { // 外部类
  2. private val bar: Int = 1
  3. class Nested { // 嵌套类
  4. fun foo() = 2
  5. }
  6. }
  7. fun main(args: Array<String>) {
  8. val demo = Outer.Nested().foo() // 调用格式:外部类.嵌套类.嵌套类方法/属性
  9. println(demo) // == 2
  10. }

更多有关类和对象的内容参见:

Kotlin 类和对象 | 菜鸟教程