地下城做解封任务的网站河北省住房和建设厅网站首页
2026/1/20 0:35:03 网站建设 项目流程
地下城做解封任务的网站,河北省住房和建设厅网站首页,沈阳做网站客户多吗,母婴网站建设 社区在 Kotlin 里#xff0c;class 是定义“类型”的关键字#xff0c;相当于“模板/蓝图”#xff0c;通过它可以创建对象#xff08;实例#xff09;。下面按常用程度#xff0c;从浅到深讲一遍。1. 最基础的类定义 class SmartDevice {fun turnOn() {println(Device…在 Kotlin 里class是定义“类型”的关键字相当于“模板/蓝图”通过它可以创建对象实例。下面按常用程度从浅到深讲一遍。1. 最基础的类定义classSmartDevice{funturnOn(){println(Device is on)}}使用valdeviceSmartDevice()// 创建实例device.turnOn()// 调用成员函数class SmartDevice定义了一个名为SmartDevice的类。SmartDevice()调用构造函数创建对象。2. 构造函数Constructor2.1 主构造函数primary constructorclassSmartDevice(valname:String,varisOn:Boolean)等价于classSmartDevice(valname:String,// 只读属性varisOn:Boolean// 可变属性){// 这里可以继续写函数、额外属性}使用valdeviceSmartDevice(TV,false)println(device.name)// TVdevice.isOntrue要点在class名后面的括号里的是“主构造函数”的参数。前面加上val/var就会自动生成属性不需要再在类体内声明。2.2 有初始化逻辑的构造函数classSmartDevice(valname:String){varisOn:Booleaninit{// init 代码块在构造时执行println(Initializing device:$name)isOnfalse}}init代码块在对象创建时按顺序执行可做检查、日志等。2.3 次构造函数secondary constructor现在使用较少只在需要多个不同构建方式时使用classSmartDevice(valname:String,varisOn:Boolean){constructor(name:String):this(name,false){// 额外初始化逻辑}}3. 属性propertiesclassSmartDevice(valname:String,// 只读属性外部只能读varisOn:Boolean// 可读可写属性){varvolume:Int0// 普通属性}val只读类似 Java 的final字段引用。var可变。可以自定义 getter / settervarvolume:Int0set(value){fieldvalue.coerceIn(0,100)// 限制在 0..100}field是该属性的“幕后字段”。4. 成员函数methodsclassSmartDevice(valname:String){varisOn:BooleanfalsefunturnOn(){isOntrueprintln($nameis ON)}funturnOff(){isOnfalseprintln($nameis OFF)}}类内部可以使用其他成员isOn、turnOff()等。在类内部调用本类方法时可以省略this.。5. 继承inheritance默认类是final不能被继承。要允许被继承需要openopenclassSmartDevice(valname:String){openfunturnOn(){println($nameis ON)}}子类使用:继承并在构造时调用父类构造函数classSmartTvDevice(name:String,valchannel:Int):SmartDevice(name){overridefunturnOn(){println(Turning on TV at channel$channel)super.turnOn()}}使用valtvSmartTvDevice(Living Room TV,5)tv.turnOn()6. 抽象类和接口6.1 抽象类abstractabstractclassSmartDevice(valname:String){abstractfunturnOn()abstractfunturnOff()}不能直接实例化。子类必须实现抽象函数classSmartTvDevice(name:String):SmartDevice(name){overridefunturnOn(){...}overridefunturnOff(){...}}6.2 接口interfaceinterfaceSwitchable{funturnOn()funturnOff()}classSmartLamp:Switchable{overridefunturnOn(){...}overridefunturnOff(){...}}一个类可以实现多个接口。7. 数据类data class用于保存数据的“值类型”dataclassUser(valid:Int,valname:String)自动生成toString()equals()/hashCode()copy()componentN()支持解构使用valuser1User(1,Tom)valuser2user1.copy(nameJerry)println(user1)// User(id1, nameTom)println(user2user1)// false内容不同8. 单例objectobjectDeviceManager{valdevicesmutableListOfSmartDevice()funadd(device:SmartDevice){devices.add(device)}}object定义的是单例全局只有一个实例直接通过DeviceManager.add(...)使用。9. 内部类和嵌套类classOuter{privatevala1classNested{funfoo()2// 不访问 Outer.a}innerclassInner{funfoo()a// 可以访问外部类实例的成员}}class Nested静态嵌套类不持有外部类实例。inner class内部类持有外部类实例引用可以访问外部成员。10. 可见性修饰符访问控制public默认任何地方都能访问。internal同一模块内可访问。protected类及其子类中可访问。private当前文件或当前类内部可访问。示例classSmartDevice{privatevarsecretId:Stringxxx// 外部看不到protectedfunlog(){...}// 只有子类看得到}总结记忆如果你刚入门 Kotlin先记住几条常用规则普通类class Foo { ... }用Foo()创建实例。构造 属性最常用写法classFoo(vala:Int,varb:String)继承要加open/abstract重写要加override。只存数据就用data class。需要全局唯一就用object。类内部函数互相调用可以直接写turnOff()等价this.turnOff()。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询