欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kotlin学习(6)-类和对象之类成员介绍

程序员文章站 2024-03-20 22:10:46
...

Kotlin的类成员包括:成员属性,成员方法,伴生对象和静态属性。

1.成员属性

kotlin对类成员属性声明采取了一种简洁的方式:属性字段和构造函数的入参一一对应,那么抛弃Java中那种this.属性和get/set的操作,考虑让编译器自动对属性进行命名和赋值。这样就有了下面的kotlin写法:

class Person(var age:Int,val sex:Int = 0) {
    
}

如果某个字段不是入参同名属性,需要在类内部显示声明该属性字段。

class Person(var age: Int, val sex: Int = 0) {
    //新增字段sexAlias
    var sexAlias: String

    init {
        sexAlias = if (sex == 0) "阳" else "阴"
    }

}


//外部调用sexAlias
var person = Personn(20,0)
println("------> sexAlias = ${person.sexAlias}")

2.成员方法

方法的定义使用关键字"fun",方法返回类型使用“:+数据类型”跟在方法名后,如下示例:

class Person(var age: Int, val sex: Int = 0) {
    var sexAlias: String

    init {
        sexAlias = if (sex == 0) "阳" else "阴"
    }

    fun getResponse(name: String): String {
        return "你好!$name,我今年${age}岁了"
    }
}

//调用方法getResponse
var person = Person(20,0)
var response = person.getResponse("小明")
println("-------> response:${response}")

3.伴生对象

伴生对象使用关键字“companion”,它是用来表示类内部的对象声明(思考之前调用Person中属性都必须先声明实例化Person才可以)。
有的书中写到可以将其与Java中的staic属性对比,的确kotlin提供的伴生对象在行为上与Java的static一样,甚至在JVM平台使用
注解@JvmStatic可以将伴生对象生成为真正的静态方法或字段,但伴生对象在运行时候仍然是真实对象的实例成员。

class Person(var age: Int, val sex: Int = 0) {
    var sexAlias: String

    init {
        sexAlias = if (sex == 0) "阳" else "阴"
    }

    fun getResponse(name: String): String {
        return "你好!$name,我今年${age}岁了"
    }

    companion object Strength {
        fun strengthIsStrong(sexAlias: String): String {
            var answer: String = when (sexAlias) {
                "阳" -> "一般男性力气更大"
                "阴" -> "一般女性力气较小"
                else -> "无法比较"
            }
            return answer
        }
    }
}

//调用伴生对象
var result = Person.strengthIsStrong("阳")
println("------> result = ${result}")

伴生对象的初始化是在相应的类被加载(解析)时,这一点也与Java中的staic{}相同。

4.静态属性

同样在伴生对象中,我们可以定义伴生对象的相关属性。

class Person(var age: Int, val sex: Int = 0) {
    var sexAlias: String

    init {
        sexAlias = if (sex == 0) "阳" else "阴"
    }

    fun getResponse(name: String): String {
        return "你好!$name,我今年${age}岁了"
    }

    companion object Strength {
        //定义伴生对象属性
        val MALE = 0
        val FEMAL = 1
        val UNKNOWN = -1
        fun strengthIsStrong(sexAlias: String): Int {
            var answer: Int = when (sexAlias) {
                "阳", "男" -> MALE
                "阴", "女" -> FEMAL
                else -> UNKNOWN
            }
            return answer
        }
    }
}

5.总结

  • 类中包括成员属性,成员方法,伴生对象;
  • kotlin中成员属性主要时删除了冗余的同名属性声明语句,删除了冗余的同名属性赋值语句,删除了冗余的get/set方法;
  • 非入参属性需要在类内部显示声明;
  • 伴生对象使用关键字companion修饰;
  • 利用伴生对象可以实现类似Java中static的静态属性功能;
  • 类加载时候会运行伴生对象代码块。