当前位置: 首页 > 后端技术 > Java

KotlinClass自定义类

时间:2023-04-01 15:09:50 Java

KotlinClass自定义类1.Kotlin构造函数有4种写法1.1第一种写法类似Java/***默认类是public类型,成员变量也是public类型*/classDog{//成员必须被初始化,不像Javavarname:String=""varage:Int=0//构造函数的第一种写法类似于Javaconstructor(name:String,age:Int){this.name=namethis.age=age}}1.2第二种写法,直接写在类名后面/***构造函数的第二种写法,直接写在类名后面*/classDog2constructor(name:String,age:Int){varname=namevarage=age}1.3第三种写法,直接省略构造函数/***构造函数的第三种写法,和上面类似,直接省略构造函数*/classDog3(name:String,age:Int){valname=}1.4推荐!接收参数直接在构造函数中定义/***推荐!!!**构造函数的第四种写法,直接在构造函数中定义参数,省略自定义接收参数的构造函数*/classDog4(varname:String,varage:Int){}2.使用自定义Class/***自定义Class*/funmain(args:Array){valcandyDog=Dog("candy",23)println(candyDog.age)println(candyDog.name)//推荐写法,可以直接定义成员变量name和agevalcandyDog4=Dog4("candy",25)println(candyDog4.name)println(candyDog4.age)valcandyDog3=Dog3("candy",25)//println(candyDog3.name)//错误,因为没有自定义name变量}3.自定义接口是public的,默认是publicinterfaceSimpleInfo{funsimpleMethod()}implementation:through:interfacenametoimplementclassSimpleClass(varx:Int):SimpleInfo{//overrideMandatory,提醒你什么方法overridefunsimpleMethod(){}}@Overrideinjava而不是Mandatory4.AbstractclassabstractclassAbsClass{//抽象方法不需要方法体,需要重写abstractfunabsMethod()//默认是final,方法子类不能重写funabspriviteMethod2(){}//open关键字表示子类可以overrideopenfunabsPublicMethod3(){}}openclassAbsChild(varx:Int):AbsClass(),SimpleInfo{overridefunsimpleMethod(){TODO("notimplemented")//要更改已创建函数的主体,请使用File|设置|文件模板。}overridefunabsMethod(){TODO("notimplemented")//要更改已创建函数的主体,请使用File|设置|文件模板。}//如果为此方法指定了finalSubclassAbsChild2无法覆盖它finaloverridefunabsPublicMethod3(){}}classAbsChild2(vary:Int):AbsChild(y){overridefunsimpleMethod(){}overridefunabsMethod(){}//不能重写absPublicMethod3}5.Propertyjava在类中定义了public属性人类{私人年龄;私有字符串名称;publicintgetAge(){返回年龄;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){返回名称;}publicvoidsetName(Stringname){this.name=name;}}Kotlin只需要这样写就可以在kotlin中实现getsetclassPerson(age:Int,name:String){varage:Int=agevarname:String=name}class属性和Java有区别(kotlin的幕后属性对应java的字段)。接口不能有age作为属性类型,其内部字段对应java的属性。age默认有getset方法,也可以reset写getset方法classPerson(age:Int,name:String){varage:Int=ageget(){println("getfield$field")returnfield}set(value){println("设置字段$field")}varname:String=name//name这个属性默认已经有一个getset方法}属性引用:属性引用和方法引用类似通过类名::property/object::propertyvalnoReceiverAgeRef=Person::age//这是一个属性,不是绑定到接收者引用valreceiverAgeRef=person::age//这是一个绑定到接收者的属性引用funmain(args:Array){//实例化valperson=Person(23,"Johnny")println(person.age)//直接方法属性println(person.name)//绑定receiver的引用valageRef=person::age//通过属性移除,使用getsetageRef.set(25)println(ageRef.get())//未绑定接收者valnoReceiverAgeRef=Person::agevalperson2=Person(99,"candy")//在没有接收者的情况下调用setget时,需要绑定noReceiverAgeRef.set(person2,55)println(noReceiverAgeRef.get(person2))}欢迎大家访问个人博客JohnnyHut欢迎关注个人公众号