类的定义
语法格式
class Runoob { // 类名为 Runoob// 大括号内是类体构成}
类的属性
属性定义
class Runoob {var name: String = ……var url: String = ……var city: String = ……}
成员函数定义
class Runoob() {fun foo() { print("Foo") } // 成员函数}
属性的引用
val site = Runoob() // Kotlin 中没有 new 关键字println(site.name) // 使用 . 号来引用println(site.url)
getter和setter方法
基本语法格式:
var propertyName: PropertyType = property_initializerget()set()
var +变量名+ : + 变量类型 + = + 变量的默认值。
这里的
默认值可以不写。
这里的get()方法是用于获取变量propertyName。
这里的set()方法是用于设置变量propertyName.
实例
class Person {var lastName: String = "zhang"get() = field.toUpperCase() // 将变量赋值后转换为大写setvar no: Int = 100get() = field // 后端变量set(value) {if (value < 10) { // 如果传入的值小于 10 返回该值field = value} else {field = -1 // 如果传入的值大于等于 10 返回 -1}}}// 测试fun main(args: Array<String>) {var person: Person = Person()// 这里是将属性lastname赋值,也就是使用了set()方法,这里没有做特殊处理只是传入person.lastName = "wang"// 这里获取lastName的时候会默认采用get()方法,会把lastName的值转换为大写输出println("lastName:${person.lastName}")// 根据set方法,传入的值小于10的时候,no的值就是传入的值9person.no = 9println("no:${person.no}")// 根据set方法,传入的值大于10的时候,no的值是-1person.no = 20println("no:${person.no}")}
注意事项
这里的field,代指的就是方法依托的属性。
比如:
var lastName: String = "zhang"get() = field.toUpperCase() // 将变量赋值后转换为大写set
这里的`field`代指的就是`lastName`。
构造器
初始化方法
一般来讲,我们会使用init()方法作为初始化方法,这方法会再对象创建的时候自动调用。
类似于java中的构造方法。
基本语法
class Person constructor(firstName: String) {init {println("FirstName is ${firstName}")}}
实例
class Runoob (name: String) { // 类名为 Runoob// 大括号内是类体构成var siteName = nameinit {println("初始化网站名: ${name}")}}fun main(args: Array<String>) {val runoob = Runoob("菜鸟教程")println(runoob.siteName)}
输出结果如下
初始化网站名: 菜鸟教程菜鸟教程
特殊类
抽象类
也就是成员属性和方法不需要具体实现的类。
一般都使用abstract关键词来标明是抽象类
open class Base {open fun f() {}}abstract class Derived : Base() {override abstract fun f()}
嵌套类
也就是类里面包含了其他类。
调用格式为:外部类.嵌套类.嵌套类方法/属性。
实例
class Outer { // 外部类private val bar: Int = 1class Nested { // 嵌套类fun foo() = 2}}fun main(args: Array<String>) {val demo = Outer.Nested().foo() // 调用格式:外部类.嵌套类.嵌套类方法/属性println(demo) // == 2}
更多有关类和对象的内容参见:
