Kotlin开发之旅

Kotlin 类和对象

2019-01-28  本文已影响7人  奔跑吧技术人

前言

环境以及工具

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爬虫之旅之豆瓣音乐

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

上一篇下一篇

猜你喜欢

热点阅读