Kotlin 类和对象

作者: 奔跑吧技术人 | 来源:发表于2019-01-28 23:39 被阅读7次

    前言

    • 你还在把Java当成Android官方开发语言吗?Kotlin了解一下!
    • 2017年Google IO大会宣布使用Kotlin作为Android的官方开发语言,相比较与典型的面相对象的JAVA语言,Kotlin作为一种新式的函数式编程语言,也有人称之为Android平台的Swift语言。

    环境以及工具

    Android Studio 3.3

    类的修饰符

        //----------------------- 类的修饰符-------------------------------------
        //类属性修饰符
    //    abstract    // 抽象类
    //    final       // 类不可继承,默认属性
    //    enum        // 枚举类
    //    open        // 类可继承,类默认是final的
    //    annotation  // 注解类
        //访问权限修饰符
    //    private    // 仅在同一个文件中可见
    //    protected  // 同一个文件中或子类可见
    //    public     // 所有调用的地方都可见
    //    internal   // 同一个模块中可见
    

    类定义

    定义类、属性、函数

    //-----------------------类定义-------------------------------------
    class Hello {
        var name: String = "boyi.chen"
        var age: Int = 100
        fun sayHello() {
            println("hello kotlin")
        }
    }
    fun main(args: Array<String>) {
       //-----------------------类定义-------------------------------------
        val hello = Hello()
        println(hello.name + ":" + hello.age)//输出结果-------------------------boyi.chen:100-------------------------
    
    }
    

    主构造函数、次构造函数

    //-----------------------主、次构造函数-------------------------------------
    class Student constructor(name: String) {
        //属性初始化
        // also在函数块内可以通过 it 指代该对象
        val firstProperty = "First property: $name".also {
            println(it)
        }
    
        constructor(name: String, age: Int) : this(name) {
            println("次构造函数->name is $name : age is $age")
        }
    
        init {
            println("初始化块->name is $name")
        }
    }
    fun main(args: Array<String>) {
         //-----------------------主、次构造函数-------------------------------------
        //如果类有主构造函数,每个次构造函数都要,或直接或间接通过另一个次构造函数代理主构造函数
        val student = Student("boyi.chen")
    
    //    *********************************输出结果*********************************
    //    First property: boyi.chen
    //    初始化块->name is boyi.chen
    //    *********************************输出结果*********************************
    }
    

    嵌套类

    类可以嵌套在其他类中

    //-----------------------嵌套类-------------------------------------
    class Outer {
        private val name: String = "boyi.chen"
    
        class Inner {
            val age: Int = 999
    
        }
    }
    
    fun main(args: Array<String>) {
        //-----------------------嵌套类 -------------------------------------
        println(Outer.Inner().age)//输出结果-------------------------999-------------------------
    }
    

    内部类

    类可以标记为 inner 以便能够访问外部类的成员。内部类会带有一个对外部类的对象的引用

    //-----------------------内部类-------------------------------------
    //内部类使用 inner 关键字来表示
    //内部类会带有一个对外部类的对象的引用,所以内部类可以访问外部类成员属性和成员函数。
    //要访问来自外部作用域的 this,我们使用this@label,其中 @label 是一个 代指 this 来源的标签
    class Outer2 {
        private val name: String = "boyi.chen"
        val name2: String = "boyi.chen2"
    
        inner class Inner2 {
            val temp: String = name
            val objects = this@Outer2
        }
    }
    
    fun main(args: Array<String>) {
        //-----------------------内部类-------------------------------------
        println(Outer2().Inner2().temp)//输出结果-------------------------boyi.chen-------------------------
        println(Outer2().Inner2().objects.name2)//输出结果-------------------------boyi.chen2-------------------------
    }
    

    匿名内部类

    //-----------------------匿名内部类-------------------------------------
    interface OnClickListener {
        fun test()
    }
    class Test {
        var name = "匿名内部类"
    
        fun setOnClickListener(test: OnClickListener) {
            test.test()
        }
    }
    
    fun main(args: Array<String>) {
     //-----------------------匿名内部类-------------------------------------
        val test = Test()//输出 接口定义的方法在匿名内部类中实现
        test.setOnClickListener(object : OnClickListener {
            override fun test() {
                println("接口定义的方法在匿名内部类中实现")
            }
        })//输出结果-------------------------接口定义的方法在匿名内部类中实现-------------------------
    }
    

    源码

    请关注公众号并在后台回复:kotlin

    Kotlin重构系列分享教程

    Kotlin环境搭建
    Kotlin重构初体验之告别FindViewById
    Kotlin基本类型
    Kotlin 控制语句 if when for while
    Kotlin返回与跳转

    Kotlin重构如何兼容原先的ButterKnife、EventBus3.1
    当ButterKnife8.8.1碰到AndroidX怎么办
    Githup教程开源项目

    Python爬虫系列分享教程

    Python爬虫之旅之Selenium库的使用
    Python爬虫之旅之豆瓣音乐

    请关注我(分享日常开发)

    相关文章

      网友评论

        本文标题:Kotlin 类和对象

        本文链接:https://www.haomeiwen.com/subject/eqzajqtx.html