类
1.属性
1.1 定义属性
class Perple{
var name : String ="" 可变属性
val sex : String ="" 不可变属性
}
1.2 getter setter
var allByDefault: Int?
var initialized = 1 类型为 Int, 默认实现了 getter 和 setter
val simple: Int?
val inferredType = 1 类型为 Int 类型,默认实现 getter
自定义服务器
var lastName: String = "zhang"
get() = field.toUpperCase()
set
var no: Int = 100
get() = field
set(value) {
if (value < 10) {
field = value
} else {
field = -1
}
}
1.3 lateinit 关键字
使用lateinit即可使属性为空
lateinit var name : String
2. 主构造器和初始化代码段
kotlin中只能有一个主构造器 主构造器是类头部的一部分,位于类名之后
class Perple constructor(firstName: String){
}
如果主构造器没有任何的注解和修饰符 可省略
class Perple (firstName:String){
}
主构造器中不能写代码,初始化代码可以放在初始化代码块中,
class Perple (firstName : String){
init{
xxx
}
}
通过构造器定义属性
class Perple(var name: String){
}
3. 次构造器
次构造器以constructor开头
class Perpon{
constructor(parent: Person) {
parent.children.add(this)
}
}
如果有主构造器 则次构造器得代理主构造器
class Person(val name: String) {
constructor (name: String, age:Int) : this(name) {
}
}
声明一个空的主构造函数 ,就没有公共的构造函数
class Perple private constructor(){
}
4. 抽象类
关键字:abstract
abstract class Derived : Base() {
override abstract fun f()
}
5. 嵌套类
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
fun main(args: Array<String>) {
val demo = Outer.Nested().foo()
println(demo)
}
6. 内部类
class Outer {
private val bar: Int = 1
var v = "成员属性"
inner class Inner {
fun foo() = bar
fun innerTest() {
var o = this@Outer
println("内部类可以引用外部类的成员,例如:" + o.v)
}
}
}
fun main(args: Array<String>) {
val demo = Outer().Inner().foo()
println(demo)
val demo2 = Outer().Inner().innerTest()
println(demo2)
}
7. 类的修饰符
classModifier: 类属性修饰符,标示类本身特性。
abstract
final
enum
open
annotation
accessModifier: 访问权限修饰符
private
protected
public
internal
|