Kotlin学习(二)类

Kotlin类


1.类的声明

Kotlin中类使用class进行声明,主构造函数直接定义在类头:

class Person(name:String,age:Int){
    init{
        //构造函数的初始化操作在此
    }
}

Kotlin中类头和类体都是可选的,如果一个类没有类体,那么花括号是可以省略的

默认任何类都是继承于Any,kotlin中所有的类默认就是final的,这点与java是相反的,在kotlin中使用open关键字修饰, 使类可以被继承(abstract类可以被继承)。

2.数据类

数据类用data关键字修饰

data class People(var id :Long,var name :String,var age :Int)
//为确保这些生成代码的一致性,并实现有意义的行为,数据类要满足下面的要求:
//注意如果构造函数参数中没有 val 或者 var ,就不会在这些函数中出现;
//主构造函数应该至少有一个参数;
//主构造函数的所有参数必须标注为 val 或者 var ;
//数据类不能是 abstract,open,sealed,或者 inner ;
//数据类不能继承其它的类(但可以实现接口)。
//在 JVM 中如果构造函数是无参的,则所有的属性必须有默认的值,(参看Constructors);

数据类会自动创建用于访问他们属性的getter和setter,定义起来非常简便

数据类除了自动实现基本的getter方法和setter方法,还有额外的一些函数

equals()  hashCode()  copy()
3.映射对象到变量中

kotlin中可以映射对象的每一个属性到一个变量中:

val person = Person("zhangsan",12)
val (name,age) = person//Person类中的属性被映射到name和age
Loe.e("people","name = $name , age = $age")


for((key,value) in map){
    Log.e("map","key = $key , value = $value")
}
4.伴随对象

Kotlin中没有static修饰的静态属性,函数,类。我们可以使用companion修饰的伴随对象来实现静态

class Single private constructor(){//单例
    companion object{
        fun get():Single{
            return Holder.instance
        }
    }
    private object Holder{
        val instance = Single()
    }
}

一些特殊的类

1.枚举类

enum class Programer {
    JAVA, KOTLIN, C, CPP, ANDROID;
}//在 Kotlin 中,枚举的本质是一个实现了 Comparable 的 class,其排序就是按照字段在枚举类中定义的顺序来的。

2.密封类

sealed 修饰的类称为密封类,用来表示受限的类层次结构。例如当一个值为有限集中的 类型、而不能有任何其他类型时。在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例

Kotlin接口

kotlin中的接口和java中不太一样,方法可以在接口中实现。属性需要被子类重写。属性不能在接口中初始化。

你可能感兴趣的:(Kotlin学习(二)类)