Kotlin 基本语法5 继承,接口,枚举,密封

1.继承与重写的Open关键字

open class Product(val name:String
) {fun description() = "Product: $name"open fun load() = "Nothing .."}class LuxuryProduct:Product("Luxury"){//继承需要调用 父类的主构造函数override fun load(): String {return "LuxuryProduct loading ..."}}fun main() {val p:Product = LuxuryProduct()println(p.load())
}

2.类型检测

3.智能类型转化

import java.io.Fileopen class Product(val name:String
) {fun description() = "Product: $name"open fun load() = "Nothing .."}class LuxuryProduct:Product("Luxury"){//继承需要调用 父类的主构造函数override fun load(): String {return "LuxuryProduct loading ..."}fun  special():String = "Speical LuxuryProduct Function"}fun main() {val p:Product = LuxuryProduct()println(p.load())println(p is Product)println(p is LuxuryProduct)println(p is File)if (p is LuxuryProduct){p.special()}
}

4. Any 超类

跨平台支持得更好,他的Any类里的 toString hashcode equals 在不同平台有不同的实现,是为了更好的跨平台支持。

5. 对象

 5.1 object关键字 单例模式

object ApplicationConfig{var name :String = "singleName"init {println("ApplicationConfig loading ...")}fun doSomething(){println("doSomething")}}fun main() {//类名,实例名 就是一个单例对象ApplicationConfig.doSomething()println(ApplicationConfig)println(ApplicationConfig)println(ApplicationConfig)println(ApplicationConfig===ApplicationConfig)
}

5.2  对象表达式 相当于匿名内部类

open class Player{open fun load() = "loading nothing"
}fun main() {val p = object : Player(){ //匿名内部类相当于override fun load(): String {return "anonymous nothing"}}println(p.load())
}

5.3 伴生对象 一个类只能有一个

import java.io.Fileopen class ConfigMap(val name:String){companion object{ //伴生对象  相当于静态内部类 创建的单例对象// 不管这个ConfigMap类实例化多少次,这个伴生对象就是单例,因为是不基于对象创建的,是类加载时创建的private const val PATH = "XXXX"var s:String ="asd"fun load() = File(PATH).readBytes()}}fun main() {ConfigMap.load()
}

import java.io.Fileopen class ConfigMap(val name:String){companion object{ //伴生对象  相当于静态内部类 创建的单例对象// 不管这个ConfigMap类实例化多少次,这个伴生对象就是单例,因为是不基于对象创建的,是类加载时创建的private const val PATH = "XXXX"var s:String ="asd"fun load() = File(PATH).readBytes()init {println("companion object 被加载了")}}}fun main() {ConfigMap("a")
}

 

6. 嵌套类 实际上就是 静态内部类 

class Player2 {class Equipment(var name: String) {fun show() = println("equipment:$name")}fun battle(){}}fun main() {val equipment = Player2.Equipment("sharp knife")}

 7. 数据类

data class Coordinate(var x: Int, var y: Int) {var isInBounds = x > 0 && y > 0}fun main() {println(Coordinate(10, 20))//== 比较的是内容,equals,Any 默认实现 === ,比较引用//=== 比较引用println(Coordinate(10, 20) == Coordinate(10, 20))
}

 8.copy函数 数据类专属

data class Student (var name:String,val age:Int){private val hobby = "music"var subject:Stringinit {println("initializing student")subject = "math"}constructor(_name:String):this(_name,10)override fun toString(): String {return "Student(name='$name', age=$age, hobby='$hobby', subject='$subject')"}constructor(_name:String,_age:Int,_hobby:String,_subject:String):this(_name,10){subject=_subject}}fun main() {val s = Student("JACK")val copy = s.copy(name = "Rose") //copy只跟主构造函数有关println(s)println(copy)
}

9.结构声明

class PlayerScore(var experience:Int ,val level :Int,val name:String){operator fun component1() = experience  //component后面那个数字必须从1开始operator fun component2() = name}fun main() {/*** 普通的结构*/val (x,y) = PlayerScore(10,20,"小智")println("$x $y")}
data class PlayerScore(var experience:Int ,val level :Int,val name:String){}fun main() {/*** 数据类自带的结构*/val (x,y) = PlayerScore(10,20,"小智")println("$x $y")
}

10. 运算符重载

 data class Coordinate(var x: Int, var y: Int) {var isInBounds = x > 0 && y > 0//    operator fun plus(other:Coordinate):Coordinate {
//        return Coordinate(x+other.x,y+other.y)
//    }operator  fun  plus(other: Coordinate) = Coordinate(x+other.x,y+other.y)}fun main() {val c1 = Coordinate(10, 20)val c2 = Coordinate(10, 20)println(c1+c2)
}

11.枚举类

enum class Direction {EAST,WEST,SOUTH,NORTH
}fun main() {println(Direction.EAST)println(Direction.EAST is Direction)
}

 11.1 枚举类定义函数

enum class Direction (private val coordinate: Coordinate){EAST(Coordinate(1,0)),WEST(Coordinate(-1,0)),SOUTH(Coordinate(0,-1)),NORTH(Coordinate(0,1));fun updateCoordinate(playerCoordinate: Direction) =Coordinate(playerCoordinate.coordinate.x+coordinate.x,playerCoordinate.coordinate.y+coordinate.y)}fun main() {val updateCoordinate = Direction.EAST.updateCoordinate(Direction.WEST)println(updateCoordinate)
}

11.2 代数数据类型

enum class LicenseStatus {UNQUALIFIED,LEARNING,QUALIFIED;}class Driver(var status: LicenseStatus) {fun checkLicense(): String {return when (status) {LicenseStatus.UNQUALIFIED -> "没资格"LicenseStatus.LEARNING -> "在学"LicenseStatus.QUALIFIED -> "有资格"}}}fun main() {println(Driver(LicenseStatus.LEARNING).checkLicense())
}

 12.密封类

 

//密封
sealed class LicenseStatus2 {object UnQualified : LicenseStatus2(){val id :String = "2131"}object Learning : LicenseStatus2()class Qualified(val licenseId: String) : LicenseStatus2()}class Driver2(var status: LicenseStatus2) {fun checkLicense(): String {return when (status) {is LicenseStatus2.UnQualified -> "没资格 ${(this.status as LicenseStatus2.UnQualified).id}"is LicenseStatus2.Learning -> "在学"is LicenseStatus2.Qualified -> "有资格,驾驶证编号 ${(this.status as LicenseStatus2.Qualified).licenseId}"}}}fun main() {println(Driver2(LicenseStatus2.UnQualified).checkLicense())
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义 Git Hook

前言 前端同学大概都熟悉 husky 这个工具,他可以直接在项目中添加 git hooks,主要解决了 git hooks 不会同步到 git 仓库的问题,保证了每个开发人员的本地仓库都能执行相同的 git hooks。 但是 husky 毕竟是一个 JS 生态的工具,…

ONLYOFFICE桌⾯应⽤程序v8.0:功能丰富,⽀持多平台

文章目录 可填写的 PDF 表单RTL支持电子表格中的新增功能其他改进和新增功能与 Moodle 集成用密码保护 PDF 文件快速创建文档本地界面主题总结 继 ONLYOFFICE 文档 v8.0 的发布后,很高兴,因为适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序…

【elementUi-table表格】 滚动条 新增监听事件; 滚动条滑动到指定位置;

1、给滚动条增加监听 this.dom this.$refs.tableRef.bodyWrapperthis.dom.scrollTop 0let _that thisthis.dom.addEventListener(scroll, () > {//获取元素的滚动距离let scrollTop _that.dom.scrollTop//获取元素可视区域的高度let clientHeight this.dom.clientHeigh…

Matlab/simulink基于MPPT风光储微电网建模仿真(持续更新)

​ 2.Matlab/simulink基于MPPT风光储微电网建模仿真(持续更新) 1.Matlab/simulink基于vsg的风光储调频系统建模仿真(持续更新)

QT 打包命令 windeployqt 在windows平台应用

本文以qt6.2.4 MSVC2019 为例,描述打包过程。 前置条件:已经生成了可执行文件,比如xxx.exe 1.在搜索框输入QT,点击QT6.2.4(MSVC 2019 64-bit) 以你实际安装的版本为准。 2.出现如下黑屏命令行 3.在QT 项目文件下新建一个打包文件夹&#x…

VIO第2讲:IMU标定实验

VIO第2讲:IMU标定实验 文章目录 VIO第2讲:IMU标定实验5 IMU标定实验5.1 仿真数据产生5.1.1 c代码分析5.1.2 生成ros包数据 5.2 Allan方差实验(港科大imu_utils)5.2.1 安装5.2.2 运行 5.3 Allan方差实验(matlab代码kali…

Vue局部注册组件实现组件化登录注册

Vue局部注册组件实现组件化登录注册 一、效果二、代码1、index.js2、App.vue3、首页4、登录(注册同理) 一、效果 注意我这里使用了element组件 二、代码 1、index.js import Vue from vue import VueRouter from vue-router import Login from ../vie…

基于SVM的功率分类,基于支持向量机SVM的功率分类识别,Libsvm工具箱详解

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接:基于SVM的功率分类,基于支持向量机SVM的功率分类识别资源-CSDN文库 https://download.csdn.net/download/abc991835105/88862836 SVM应用实例, 基于…

虚拟机的四种网络模式对比

nat网络地址转换 nat网络 桥接 内网模式 仅主机

【Java】java异常处理机制(实验五)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、理解java的异常处理机制 2、掌握try catch结构和thow和thows关键字的用法 二、实验内容 1、编写一个程序,输入某个班某门课程成绩,统计及格人数、不及格人数及课程平均分。设计一个异…

通天星CMSV6 车载视频监控平台信息泄露漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

【Python-语法】

Python-语法 ■ Python基础■ 数据类型■ 注释 单行注释,多行注释■ 编码方式 ■■■■■ ■ Python基础 ■ 数据类型 ■ 注释 单行注释,多行注释 ■ 编码方式 ■ ■ ■ ■ ■

【深度学习】微调通义千问模型:LoRA 方法,微调Qwen1.8B教程,实践

官网资料: https://github.com/QwenLM/Qwen/blob/main/README_CN.md 文章目录 准备数据运行微调设置网络代理启动容器执行 LoRA 微调修改 finetune/finetune_lora_single_gpu.sh运行微调 执行推理 在本篇博客中,我们将介绍如何使用 LoRA 方法微调通义千问模型&#…

Unity 2021.3发布WebGL设置以及nginx的配置

使用unity2021.3发布webgl 使用Unity制作好项目之后建议进行代码清理,这样会即将不用的命名空间去除,不然一会在发布的时候有些命名空间webgl会报错。 平台转换 将平台设置为webgl 设置色彩空间压缩方式 Compression Format 设置为DisabledDecompre…

Sora:开启视频生成新时代的强大人工智能模型

目录 一、Sora模型的诞生与意义 二、Sora模型的技术特点与创新 三、Sora模型的应用前景与影响 四、面临的挑战与未来发展 1、技术挑战 2、道德和伦理问题 3、计算资源需求 4、未来发展方向 随着信息技术的飞速发展,人工智能(AI)已成为…

vue3中使用vuedraggable实现拖拽el-tree数据进分组

看效果: 可以实现单个拖拽、双击添加、按住ctrl键实现多个添加,或者按住shift键实现范围添加,添加到框中的数据,还能拖拽排序 先安装 vuedraggable 这是他的官网 vue.draggable中文文档 - itxst.com npm i vuedraggable -S 直接…

拓扑空间简介

目录 介绍集合论与映射映射相关定义映射(map)映射的一种分类:一一的和到上的 拓扑空间背景介绍开子集开子集的选择 拓扑拓扑空间常见拓扑拓扑子空间同胚其他重要定义 开覆盖紧致性有限开覆盖紧致性 R R R的紧致性 习题 介绍 这是对梁灿彬的《…

【软件架构】01-架构的概述

1、定义 软件架构就是软件的顶层结构 RUP(统一过程开发)4 1 视图 1)逻辑视图: 描述系统的功能、组件和它们之间的关系。它主要关注系统的静态结构,包括类、接口、包、模块等,并用于表示系统的组织结构…

C++入门学习(三十六)函数的声明

程序是自上而下运行的&#xff0c;比如我下面的代码&#xff1a; #include <iostream> #include<string> using namespace std;int main() { int a1; int b2;int sumaddNumbers(a,b); cout<<sum;return 0; }int addNumbers(int a, int b) { int sum …

MFC 配置Halcon

1.新建一个MFC 工程&#xff0c;Halcon 为64位&#xff0c;所以先将工程改为x64 > VC 目录设置包含目录和库目录 包含目录 库目录 c/c ->常规 链接器 ->常规 > 链接器输入 在窗口中添加头文件 #include "HalconCpp.h" #include "Halcon.h"…