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中不太一样,方法可以在接口中实现。属性需要被子类重写。属性不能在接口中初始化。