kotlin 类学习

/**
 *
 * kotlin当中类和方法默认都是final,要想着继承这个类,必须使用关键字open
 * kotlin依然单继承,多实现。对于接口,类似java8。 存在非抽象方法的实现。
 *
 */

interface Study{
    fun english()
    fun chinese() = println("语文")
}

open class Person : Study{
    /**
     * person类前面存在open关键字,实现了study接口的抽象方法,
     * 这个方法默认是open, 如果不想被子类重写,需要前面主动加final关键字
     *
     */
    final override fun english() {

    }

    /**
     * 默认是final,不可以被子类重写
     */
    fun woke(){

    }

    /**
     * 可以被子类重写
     */
    open fun eat(){

    }

}

class Student : Person() {

    override fun eat() {
        super.eat()
    }

}


/**
 * abstract抽象类,抽象方法默认是open,必须被实现。
 *
 */

abstract class Woman{

    abstract fun bug()

    fun eat(){

    }

    open fun sleep(){

    }
}


/**
 * 内部类和嵌套类:默认是static嵌套类,不会持有外部类的引用。如果想要持有外部类的引用,需要加inner关键字。
 *
 */

class Out{

    //嵌套类,不会持有外部类的引用
    class Nest{

    }

    //内部类
    inner class Inner{
        fun getOutInfo() : Out = this@Out
    }

}


/**
 *
 * constructor 构造方法的关键字
 * init 初始化代码块关键字
 *
 * 若是不想类被其他代码实例化,在constructor前面写private关键字
 *
 */
class User constructor(_name : String){
    val name : String

    init {
      name = _name
    }
}

/**
 * "=="
 * java中比较基本数据类型和引用类型。基本数据类型比较值,引用类型比较的是引用。
 *
 * kotlin中引用类型,本质是调用equals来比较两个值。想要引用比较用"==="运算符
 *
 */


/**
 * object关键字修饰类。
 * 1.定义单例的一种方式,可以直接用类名.方法名,以及类名.属性
 * 2.匿名内部类
 *
 */

你可能感兴趣的:(kotlin 类学习)