类的定义
语法格式
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_initializer
get()
set()
var
+变量名
+ :
+ 变量类型
+ =
+ 变量的默认值
。
这里的
默认值
可以不写。
这里的get()方法是用于获取变量propertyName
。
这里的set()方法是用于设置变量propertyName
.
实例
class Person {
var lastName: String = "zhang"
get() = field.toUpperCase() // 将变量赋值后转换为大写
set
var no: Int = 100
get() = 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的值就是传入的值9
person.no = 9
println("no:${person.no}")
// 根据set方法,传入的值大于10的时候,no的值是-1
person.no = 20
println("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 = name
init {
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 = 1
class Nested { // 嵌套类
fun foo() = 2
}
}
fun main(args: Array<String>) {
val demo = Outer.Nested().foo() // 调用格式:外部类.嵌套类.嵌套类方法/属性
println(demo) // == 2
}
更多有关类和对象的内容参见: