Kotlin 基础教程之类、对象、接口
Kotlin基础教程之类、对象、接口
Kotlin中类、接口相关概念与Java一样,包括类名、属性、方法、继承等,如下示例:
interfaceA{
funbar()
funfoo(){
//可选方法体
}
}
classChild:A{
overridefunbar(){
//todo
}
overridefunfoo(){
super.foo()
}
}
class
构造器
Kotlin中的类可以有一个主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后。
classPersonconstructor(name:String){...}
如果主构造器没有任何注解(annotation),也没有任何可见度修饰符,那么constructor关键字可以省略
classPerson(name:String){...}
主构造器中不能包含任何代码.初始化代码可以放在初始化代码段(initializerblock)中
classPersion(name:String){
privatevalfirstName:String=name
privatevarage:Int
init{
age=10
}
}
Kotlin有一种简洁语法,可以通过主构造器来定义属性并初始化属性值:
classPersion(valname:String,varage:Int){...}
如果构造器有注解,或者有可见度修饰符,这时constructor关键字是必须的,注解和修饰符要放在它之前
classPersionpublic@Injectconstructor(valname:String){...}
类还可以声明次级构造器(secondaryconstructor)。如果类有主构造器,那么次级构造器都必须委托给主构造器
classPersion(valname:String){
constructor(name:String,age:Int):this(name){
//todo
}
}
类实例化
Kotlin没有new关键字
valpersion=Persion("jason")
继承
Kotlin的继承概念和Java一样,”类名:超类“冒号表示继承。
与Java的Object相对,Kotlin也有一个这样的Any类,类默认继承Any。
与Java的final相反,Kotlin类默认是final的,允许被继承的类,需要加open修饰。
openclassBase{
openfunv(){...}
funnv(){...}//can'tbeoverride
}
方法和属性的覆盖
方法的覆盖和Java类似,但是只有open的方法才能override,final类是不允许定义open方法。
classOther:Base(){
overridefunv(){...}
}
可以加final禁止ovrride,finaloverridefunv(){...}
与方法的覆盖类似,Kotlin提供了属性的覆盖,例如
openclassFoo{
openvalx:Int=0
}
classBar(overridevalx:Int):Foo{...}
classBar1:Foo(){
overridevarx:Int=0//overridetovar
}
抽象类
类本身,或类中的部分成员,都可以声明为abstract的,抽象类不必标识open。
abstractclassBase{
abstractfunv()
}
同伴对象
Kotlin的类没有静态方法,大多数情况下,建议使用包级函数(packagelevelfunction)替代,或者使用同伴对象,
达到静态方法效果
classFoo{
companionobject{
funv(){}
}
}
interface
Kotlin的接口和Java差不多,但是接口的属性不一样,Kotlin接口中的属性是抽象的。
interfaceA{
valx:Int
}
classB:A{
overridevalx:Int=10
}
object
Kotlin没有静态类,可以用object实现静态类的效果。
objectB{
funfoo(){
//dosomething
}
}
classA{
funbar(){
B.foo()
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!