IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin学习笔记六 -> 正文阅读

[移动开发]Kotlin学习笔记六

kotlin 类 继承

一个类默认是final 的 不能被继承 除非使用open关键字 方法也是如此 只有用open 修饰 才能被重载。
eg

 open class a(val S:String){
open fun load()
}
//子类拥有构造函数
b (val s:String,val v:String) :a(s){
fun special()
}

除了open关键字,还需注意,子类必须super调用父类构造方法(除非父类没有含参数的构造方法)。kotlin继承时如果子类有主构造函数,那么必须在后面super父类构造方法。若子类没有主构造函数,那么在次构造函数处super调用父类构造方法
eg

 open class a(val S:String){
open fun load()
}
//子类没有主构造函数
b :a{
constructor(val d:String,val e:String):super(d){
}
fun special()
}

注意

类型检测

is关键字
eg bb is a
相当于 JAVA instanof

类型转换

as 关键字
上例
test:a=b() 类型为父类的 a
test.special 是不行的
需要 (test as b) .special()
kotlin 智能类型转换
只用 as 转一次 后面就能一直使用 test.special()
java 的话 必须每次都as 除非一个变量来接受转换后的对象

超类

any类 kotlin的所有类的超类 java的超类是object。
kotlin跨平台特性 使得any类里面 tostring,hashcode 这些方法没有具体实现 代码看不到 而是根据平台特性 来内部实现的(存在,但我们看不到)

kotlin object 关键字

定义一个 只能产生一个实例的类-单例
三种使用方式 :
对象声明
对象表达式
伴生对象

对象声明

单例:不浪费资源,用来加载文件,数据库,保存配置,方便管理状态
kotlin没有静态方法

使用 object appconfig{
fun a()
}
kotlin中使用对象声明,产生的是一个简单的单例(初始化是首次访问时,初始化过程线程安全),但是可以放一些配置属性,一些编号与字符串相互转换map,贯穿一个流程的对象 访客信息登记类等等
appconfig.a()。

总而言之,单例可以保存一些状态和常量。在java中,经常使用接口(属性默认都是static final的)来保存一些常量。

关于静态类
https://www.jianshu.com/p/80b404da976b
关于静态类与单例
https://blog.csdn.net/sinat_20559947/article/details/48684015
关于单例
https://www.jianshu.com/p/bdaf68599bad

对象表达式

一些只用一次的类,那就名字都不用给它取了,匿名类,它是一个变体实例,就是继承父类或者接口(多数为接口),重载一些方法,只使用一次,用完就丢,没必要重新去写一个类,继承,然后使用new实例化 。保持object的特性 该匿名类只有一个实例(也只能有一个,因为他没有名字)
eg

open a(){
fun ab
}
b (){
val aa=object : a(){
override fun ab
}
}

伴生对象

如果想将某个对象的初始化和一个类捆绑在一起,就可以使用伴生对象 companion修饰,一个类只能有一个伴生对象。可以是一些配置,文件,资源加载类

eg 
class a(){
companion object{
属性  
fun load()
}

}

可以直接使用 a.load
特点:无论创建多少个实例类,调用几次,伴生对象只有一个。
这里这其实就是java类里的 静态实现 (属性,方法)
但是比java类科学
只有被调用的时候,才会实例化。

伴生对象和对象声明的区别,其实就在于伴生,他的特性和所伴生的对象,是有关联的

写一些线程安全的单例,就会用到伴生对象。这样就和java的单例写法有点像,利用静态特性。虽然kotlin没有static关键字

而对象声明,就像一个独立的单例

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:56:30  更:2022-02-06 13:58:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:48:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码