Kotlin学习笔记-3 --- 类与对象

文章参考

class KotlinClass {

}
/**
 * 空类
*/
class EmptyClass

类的修饰符

1)classModifier: 类属性修饰符,标示类本身特性

  • abstract // 抽象类
  • final // 类不可继承,默认属性
  • enum // 枚举类
  • open // 类可继承,类默认是final的
  • annotation // 注解类

2)accessModifier: 访问权限修饰符

  • private // 仅在同一个文件中可见
  • protected // 同一个文件中或子类可见
  • public // 所有调用的地方都可见
  • internal // 同一个模块中可见

1、构造函数

1)主构造函数

定义

class PersonEntity constructor(name: String, sex: String, age: Int) {
    private val TAG: String = "PersonEntity"

    private var mName: String = name
    private var mSex: String = sex
    private var mAge: Int = age

    init {
        Log.i(TAG, "初始化 : $mName   $mSex   $mAge")
    }

    fun display() {
        Log.i(TAG, "个人信息 : $mName   $mSex   $mAge")
    }
}

使用

val person1 = PersonEntity("Alex", "man", 24)
person1.display()

输出日志
Kotlin学习笔记-3 --- 类与对象
2)次构造函数

定义

class PersonEntity constructor(name: String) {
    private val TAG: String = "PersonEntity"

    private var mName: String = name
    private var mSex: String = "xxx"
    private var mAge: Int = -1

    init {
        Log.i(TAG, "主构造函数初始化 : $mName   $mSex   $mAge")
    }


    constructor(name: String, sex: String) : this(name) {
        mSex = sex
        Log.i(TAG, "次构造函数(2个参数)初始化 : $mName   $mSex   $mAge")
    }


    constructor(name: String, sex: String, age: Int) : this(name, sex) {
        mAge = age
        Log.i(TAG, "次构造函数(3个参数)初始化 : $mName   $mSex   $mAge")
    }


    fun display() {
        Log.i(TAG, "个人信息 : $mName   $mSex   $mAge")
    }
}

使用

val person1 = PersonEntity("Alex", "man", 24)
person1.display()

日志输出
Kotlin学习笔记-3 --- 类与对象

2、getter 和 setter

  • getter 和 setter 都是可选
  • val不允许设置setter函数,因为它是只读的

注:Kotlin 中类不能有字段。提供了 Backing Fields(后端变量) 机制,备用字段使用field关键字声明,field 关键词只能用于属性的访问器。

定义

class StudentEntity {
    val TAG: String = "StudentEntity"
    
    var name: String? = ""
        get() = field?.toUpperCase()
        set(value) {
            field = if (TextUtils.isEmpty(value.toString())) {
                "xxx"
            } else {
                value
            }
        }

    var age: Int? = 0
        get() {
            return if (field?.toInt() == 0) {
                -1
            } else {
                field?.toInt()
            }
        }

    fun display() {
        Log.i(TAG, "$name    $age")
    }
}

使用

val student1 = StudentEntity()
student1.name = ""
student1.age = 0
student1.display()
student1.name = "Alex"
student1.age = 24
student1.display()

日志输出
Kotlin学习笔记-3 --- 类与对象

3、常用类

1)抽象类

  • 类和属性若想被继承,需要用关键字open标注
  • 抽象类或抽象成员则无需open标注

父类 abstract

/**
 * 抽象类
 */
abstract class Parent {

    //可继承方法
    open fun p() {}

    //抽象方法
    abstract fun p2()
}

子类

class Child : Parent() {

    override fun p() {
        super.p()
    }

    override fun p2() {
        TODO("Not yet implemented")
    }

}

父类 open

open class Parent {
    //可继承方法
    open fun p() {}
}

子类

class Child : Parent() {

    override fun p() {
        super.p()
    }
}

2)嵌套类

3)内部类

4)内部匿名类

上一篇:扩展jQuery的方法统一处理AJAX调用过程中产生的异常错误信息


下一篇:RxJava的四种Subjects:PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的理解