Kotlin基础知识

package com.ys.usekotlin

import com.ys.base.utils.L


//接口
interface TestBy {
    fun test() {//默认实现方法
        L.i("test")
    }
}

//实现接口后面不需要()
//接口实现类
class TestByImpl : TestBy {

    override fun test() {
        L.i("test")
    }
}


//基类
abstract class BaseModel {
    abstract fun ab()
}

//继承父类后面需要()
//父类,open可被继承
open class ParentModel : BaseModel() {

    var s = "ParentModel.ab"
    override fun ab() {
        L.i("$s")
    }
}

//空类
//class Model

//非空类,by委托 //!!表示变量为null时抛出异常
class Model constructor(ipl: TestByImpl, var a: String, val b: String) : ParentModel(), TestBy by ipl {//主构造方法

    //静态区
    companion object A {
        //调用Model.A.say();
        fun say(): String {
            return "holle"
        }
    }

    val d = b
    var e = a
    var f = 10

    //主构造方法代码段
    init {
        e = b

        var ipml = ipl
        if (ipml == null) {
            L.i("ipml == null")
        }

        // 做过类型判断以后,ipml会被系统自动转换为TestByImpl类型
        if (ipml is TestByImpl) {
            ipml.test()
        }
    }

    //次构造方法1,无参
    constructor() : this(1, "b")

    //次构造方法2,带参
    constructor(a1: Int, b1: String) : this(b1, b1, b1) {
        //方法体无代码可以省略
    }

    //次构造函数3,带参
    constructor(h: String, g: String, s: String) : this(TestByImpl(), s, s) {

    }


    //成员函数
    fun main() {

        //类型转换
        var bb: Boolean = false
        var sss = bb.toString()

        var ii: Int = 100
        sss = ii.toString()

        var dd: Double = 29.1
        ii = dd.toInt()
        dd = ii.toDouble()
        dd = ii / 2.0

        var cc: Char = 'a'
        sss = cc.toString()


        //创建实例
        Model(1, "")
        Model("", "", "")//
        Model(TestByImpl(), "", "")//主构造函数

        //使用成员变量
        L.i(a)

        //扩展函数静态,实例函数动态
        var m: ParentModel = Model()
        m.ab() //Model的ab
        m.excfun()  //ParentModel的excfun

        //使用扩展函数,空对象也能使用
        var onull = null
        onull.say()

        //调用伴生对象扩展函数
        Model.A.afoo("afoo")


        //内部类实例创建,和调用内部类的方法,和内部类调用外部类
        Model().Inner().innerTest()

        //嵌套类实例创建
        Model.Nested().foo(this)

        //匿名内部类实例
        var test: TestInterFace = object : TestInterFace {
            override fun test() {
                L.i("对象表达式创建匿名内部类的实例")
            }
        }

        //可变长度参数
        testVararg(1, 2, 3, 4, 5, 6)

        var a = 42
        //when就是switch,可返回值
        val answerString1 = when {
            a == 42 -> "I have the answer."
            a > 35 -> "The answer is close."
            else -> "The answer eludes me."
        }

        //ss返回值类型由值固定
        var ss = when (a) {
            is Int -> 1 //判断类型
            42 -> "I have the answer." //判断值
            35 -> "The answer is close."
            else -> false
        }

        //没有了三目运算符
        var aee =
                if (ss is Int) {
                    L.i("Choose a")
                    100
                } else if (ss is String) {
                    false
                } else
                    "SS"

        //for 循环
        var array = IntArray(100)
        for (i in array.indices) {
            array[i] = i * 100
        }
        for (i in array) {
            L.i(i.toString())

        }

        //forEach
        array.forEach {
            if (it == 100) {
                L.i(it.toString())
            }
        }

        //while循环
        while (a > 0) {
            L.i(a.toString())
            a--
            if (a < 10) {
                break
            } else {
                continue
            }
        }

        //do - while循环
        do {
            L.i(a.toString())
            a--
        } while (a > 0)

    }

    //伴生对象扩展函数
    fun Model.A.afoo(ss: String) {
        L.i("伴随对象的扩展函数_" + ss)
    }

    //给任何类扩展函数
    fun Any?.say(): String {
        if (this == null) return "null"
        // 空检测之后,“this”会自动转换为非空类型,所以下面的 toString()
        // 解析为 Any 类的成员函数
        return toString()
    }

    //扩展函数
    fun ParentModel.excfun() {
        L.i("ParentModel.excfun")
    }

    fun Model.excfun() {
        L.i("Model.excfun")
    }


    //可变长度参数
    fun testVararg(vararg a: Int) {
        for (aa in a) {
            L.i(aa.toString())
        }
    }

    //内部类
    inner class Inner {
        fun foo() = b // 访问外部类成员
        fun innerTest() {
            var o = this@Model //获取外部类的成员变量
            L.i("内部类可以引用外部类的成员,例如:" + o.e)
        }
    }

    //嵌套类
    class Nested {
        fun foo(model: Model): Int {
            return model.f
        }
    }

    //定义接口
    interface TestInterFace {
        fun test()
    }

    //override
    override fun ab() {
        L.i("Model.ab")
    }

}

//(1执行)companion object 静态区,
//(2执行)init 初始化代码段,
//(3执行)类里面constructor 次构造

//classModifier: 类属性修饰符,标示类本身特性。
//    abstract    // 抽象类
//    final       // 类不可继承,默认属性
//    enum        // 枚举类
//    open        // 类可继承,类默认是final的
//    annotation  // 注解类

//accessModifier: 访问权限修饰符
//    private    // 仅在同一个文件中可见
//    protected  // 同一个文件中或子类可见
//    public     // 所有调用的地方都可见
//    internal   // 同一个模块中可见
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容