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基础学习 11 -> 正文阅读

[移动开发]Kotlin基础学习 11

目录

1.Kotlin语言的Any超类学习

2.Kotlin语言的对象声明学习

3.Kotlin语言的对象表达式学习

4.Kotlin语言的伴生对象学习

5.Kotlin语言的嵌套类学习

6.Kotlin语言的数据类学习

7.Kotlin语言的copy函数学习

8.Kotlin语言的解构声明学习

9.Kotlin语言的运算符重载学习

10.Kotlin语言的枚举类学习


1.Kotlin语言的Any超类学习

//在KT中,所有的类,都隐式继承了 :Any() ,你不写,默认就有
// Any类在KT设计中:只提供标准,你看不到实现,实现在各个平台处理就好
class Obj1 : Any()
class Obj2 : Any()
class Obj3 : Any()
// TODO 85.Kotlin语言的Any超类学习
// Any == java Object
fun main(){
    println(Obj1().toString())
}

2.Kotlin语言的对象声明学习

object KtBase86{
    init {
        println("KtBase86 init...")
    }
    fun show() = println("我是show函数...")
}
// TODO 86.Kotlin语言的对象声明学习
fun main(){
    //object KtBase86 既是单例的实例,也是类名
    //小结:既然是单例的实例,又是类名,只有一个创建,这就是典型的单例
    println(KtBase86) //背后代码:println(KtBase86.INSTANCE)
    //背后代码:KtBase86.INSTANCE.show()
    println(KtBase86.show())
}

3.Kotlin语言的对象表达式学习

interface RunnableKT {
    fun run()
}

open class KtBase87 {
    open fun add(info: String) = println("KtBase87 add:$info")
    open fun del(info: String) = println("KtBase87 del:$info")
}

// TODO 87.Kotlin语言的对象表达式学习
fun main() {
    //匿名对象 表达式方式
    val p : KtBase87 = object : KtBase87(){
        override fun add(info: String) {
            //super.add(info)
            println("我是匿名对象 add:$info")
        }

        override fun del(info: String) {
            //super.del(info)
            println("我是匿名对象 del:$info")
        }
    }
    p.add("张三")
    p.del("李四")
    //具名实现方式
    val p2 = KtBase87Impl()
    p2.add("赵六")
    p2.del("赵七")

    //对java的接口 用 KT[对象表达式]  方式一
    val p3 = object : Runnable{
        override fun run() {
            println("Runnable run...")
        }
    }
    p3.run()

    //对java的接口 用 java 最简洁的方式 方式二
    val p4 = Runnable {
        println("Runnable run2...")
    }
    p4.run()

    //对KT的接口 用 KT[对象表达式]   方式一
    object : RunnableKT {
        override fun run() {
            println("RunnableKT 方式一 run ...")
        }
    }.run()

}

//小结:Java接口,有两种方式 1(object : 对象表达式)2 简洁版
//     KT接口     只有一种方式 1(object : 对象表达式)

//具名实现 具体名字 == KtBase87Impl
class KtBase87Impl : KtBase87() {
    override fun add(info: String) {
        //super.add(info)
        println("我是具名对象 add:$info")
    }

    override fun del(info: String) {
        //super.del(info)
        println("我是具名对象 del:$info")
    }
}

4.Kotlin语言的伴生对象学习

class KtBase88 {
    //伴生对象
    companion object {
        val info = "BxbInfo"
        fun showInfo() = println("显示info:$info")
        val name = "Bxb"
    }
}

// TODO 88.Kotlin语言的伴生对象学习
//伴生对象的由来:在KT中是没有java这种static静态,半生很大程度和java这种static静态差不多
// 无论KtBase88() 构建对象多少次,我们的伴生对象,只有一次加载
// 无论KtBase88.showInfo() 调用多少次,我们的伴生对象,只有一次加载
// 伴生对象只会初始化一次
fun main() {
    println(KtBase88.info)
    println(KtBase88.name)
    KtBase88.showInfo()
}

5.Kotlin语言的嵌套类学习

// TODO 内部类
// 内部类的特点:内部的类 能访问 外部的类
//              外部的类 能访问 内部的类
class Body(_bodyInfo: String){ //身体类
    val bodyInfo = _bodyInfo
    fun show(){
        Heart().run()
    }
    // 默认情况下:内部的类 不能访问 外部的类,要增加inner成为内部类才可以访问外部类
    inner class Heart{ //心脏类
        fun run() = println("心脏访问身体信息:$bodyInfo")
    }
    inner class Kidney{ //肾脏
        fun work() = println("肾脏访问身体信息:$bodyInfo")
    }
    inner class Hand{ //手
        inner class LeftHand{
            fun run() = println("左手访问身体信息:$bodyInfo")
        }
        inner class RightHand{
            fun run() = println("右手访问身体信息:$bodyInfo")
        }
    }
}
//TODO 嵌套类
// 默认情况下:都是嵌套关系
// 嵌套类特点:外部的类 能访问 内部的嵌套类
//            内部的类 不能访问 外部类的成员
class Outer{
    val info : String = "OK"
    fun show(){
        Nested().output()
    }
    class Nested{
        fun output() = println(" 嵌套类")
    }
}
// TODO 89.Kotlin语言的嵌套类学习
fun main() {
    //内部类:
    Body("isOK").Heart().run()
    Body("isOK").show()
    Body("isOK").Kidney().work()
    Body("isOK").Hand().LeftHand().run()
    Body("isOK").Hand().RightHand().run()
    //嵌套类
    Outer.Nested().output()
    Outer().show()
}

6.Kotlin语言的数据类学习

//普通类
class ResponseResultBean1(var msg:String,var code:Int,var data:String):Any()
//set get 构造函数
//数据类 ---- 一般用于Javabean的形式下,用数据类
data class ResponseResultBean2(var msg:String,var code:Int,var data:String):Any()
// set get构造函数 解构操作 copy toString hashCode equals 数据类 生成更丰富
// TODO 90.Kotlin语言的数据类学习
// 1.普通类与数据类的 toString 背后原理
// 2.前面学习过的 == 与 ===
// 3.普通类的 == 背后原理
// 4.数据类的 == 背后原理
fun main() {
    // val(v1,v2,v3) = list 这个是list集合之前的 解构操作
    println(ResponseResultBean1("loginSuccess",200,"登录成功的数据..."))
    //普通类:Any() toString Windows实现打印了   com.bxb.s5.ResponseResultBean1@266474c2
    println(ResponseResultBean2("loginSuccess",200,"登录成功的数据..."))
    //数据类:Any() 默认重写了父类的 toString 打印子类的toString详情   ResponseResultBean2(msg=loginSuccess, code=200, data=登录成功的数据...)
    println()

    //前面我们学习 == 值的比较 相当于java的equals   === 引用对象比较
    println(
        ResponseResultBean2("loginSuccess",200,"登录成功的数据...") ==
                ResponseResultBean2("loginSuccess",200,"登录成功的数据...")
    )
    //Any父类的 equals被数据类 重写了 equals 会调用子类的 equals函数(对值的比较)

    println(
        ResponseResultBean1("loginSuccess",200,"登录成功的数据...") ==
                ResponseResultBean1("loginSuccess",200,"登录成功的数据...")
    )
    //Any父类 的equals 实现 (ResponseResultBean1对象引用 比较 ResponseResultBean1对象引用)
}

7.Kotlin语言的copy函数学习

data class KtBase91(var name : String,var age : Int) //主构造
{
    var coreInfo : String = "123"
    init {
        println("主构造被调用了")
    }
    //次构造
    constructor(name : String) : this(name,99){
        println("次构造被调用")
        coreInfo = "增加非常核心的内容信息"
    }

    override fun toString(): String {
        return "toString name:$name,age:$age,coreInfo:$coreInfo"
    }
}
/*
*   生成的toString为什么只有两个参数?
*   答:默认生成的toString 或者 hashcode equals 等等 只管主构造,不管次构造
* */
// TODO 91.Kotlin语言的copy函数学习
fun main() {
    val p1 = KtBase91("张三三") //调用次构造初始化对象
    println(p1)

    val newP2 = p1.copy("李四四",66)
    println(newP2)

    //copy toString hashcode equals 等等 只管主构造,不管次构造
    //注意事项:使用copy 的时候,由于内部代码只处理主构造,所以必须考虑次构造的内容
}

8.Kotlin语言的解构声明学习

//普通类
class Student1(var name : String,var age : Int,var sex:Char)
{   //注意事项:component0 顺序必须是 component1 component2 component3 和成员一一对应,顺序下来的
    operator fun component1() = name
    operator fun component2() = age
    operator fun component3() = sex
}
// 数据类
data class Student2Data(var name:String,var age : Int,var sex:Char )

// TODO 92.Kotlin语言的解构声明学习
fun main() {
    val(name,age,sex) = Student1("张三",66,'男')
    println("普通类解构后:name:$name,age:$age,sex:$sex")

    val(name1,age1,sex1) = Student2Data("张三",66,'男')
    println("数据类解构后:name:$name1,age:$age1,sex:$sex1")

    val(_,age2,_) = Student2Data("张三",66,'男')
    println("数据类解构后:age:$age2")
}

9.Kotlin语言的运算符重载学习

class AddClass(number: Int,number2: Int)

//写一个数据类,就是为了,toString打印方便而已哦
data class AddClass2(var number1:Int,var number2: Int){
    operator fun plus(p1:AddClass2) : Int{
        return (number1 + p1.number1) + (number2 + p1.number2)
    }
    //查看整个 KT可以用的 运算符重载方式
    //operator fun AddClass2.
}
// TODO 93.Kotlin语言的运算符重载学习
fun main() {
    //C++语言 +运算符重载就行了  -运算符重载就行了
    //KT语言 plus代表+运算符重载
    println(AddClass2(1,1)+AddClass2(2,2))
}

10.Kotlin语言的枚举类学习

//KT想表达 :枚举其实也是一个class
enum class Week{
    星期一,
    星期二,
    星期三,
    星期四,
    星期五,
    星期六,
    星期日
}
// TODO 94.Kotlin语言的枚举类学习
fun main() {
    println(Week.星期一)
    println(Week.星期日)

    //枚举的值等价于枚举本身
    println(Week.星期六 is Week)
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:51:34  更:2022-05-13 11:52:51 
 
开发: 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/25 1:35:39-

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