从零开始学Kotlin第四课

面向对象:

//妹子          性格                声音
class  Girl(var chactor:String,var voice:String)

fun main(args: Array<String>) {
    var girl=Girl("彪悍","甜美")
    println("声音"+girl.voice)
}

行为

//妹子          性格                声音
class  Girl(var chactor:String,var voice:String){
    //行为
 fun   smile(){
     println("妹子笑了下,么么哒")   
    }
}

fun main(args: Array<String>) {
    var girl=Girl("彪悍","甜美")
    println("声音"+girl.voice)
    girl.smile()
}

 java的三大特性封装继承多态

属性私有private是和jav一样的,继承不一样,案例:

父类:

/**
 * open允许被继承
 */
open class Fathor{
   open var chactor:String="性格内向"
    /**
     * 方法允许重写
     */
    open fun action(){
        println("公共场合喜欢大声喧哗")
    }

}


子类:

/**
 * 继承:FATHOR
 */
class Son:Fathor(){
    /**
     * 重写方法
     */
    override fun action(){
        println("很乖巧")
    }
}

调用类:

fun main(args: Array<String>) {
    var son1=Son();
    println("儿子的性格:${son1.chactor}")
    son1.action()
}

 抽象类:

 接口实现:

interface  IMan{
    fun  xiaodidi()
}



class  Man:IMan
{
    override fun xiaodidi() {
        println("18cm")
    }
}
java 的instanceof 被Kotlin简化为is

代理和委托:
爸爸委托儿子洗碗的案例:
package DL
//洗碗的接口
interface  IWashBowl{
    fun washing()
}


package DL

/**
 * 大头儿子
 */
class  BigHeadSon:IWashBowl{
    override fun washing() {
        println("我是大头儿子一次洗碗一块钱")    }

}



package DL

/**
 * 小头爸爸委托儿子洗碗  委托模式:by +委托对象
 */
class SmallHeadFather:IWashBowl  by BigHeadSon(){

    /**
     * 重写方法,更改后继续调用委托对象的方法,如果不重写默认调用委托对象方法
     */
    override fun washing() {
        println("小头爸爸洗碗一次10元")
        BigHeadSon().washing()
    }
}


package DL

class Demo {
}

fun main(args: Array<String>) {

    var father=SmallHeadFather()
    father.washing()

}

 现在大头儿子每次创建对象都会产生一次大头儿子,做个单例模式吧。

package DL

/**
 * 大头儿子
 */
object  BigHeadSon:IWashBowl{
    override fun washing() {
        println("我是大头儿子一次洗碗一块钱")    }

}
package DL

/**
 * 小头爸爸委托儿子洗碗  委托模式:by +委托对象
 */
class SmallHeadFather:IWashBowl  by BigHeadSon{

    /**
     * 重写方法,更改后继续调用委托对象的方法,如果不重写默认调用委托对象方法
     */
    override fun washing() {
        println("小头爸爸洗碗一次10元")
        BigHeadSon.washing()
    }
}
package DL

class Demo {
}

fun main(args: Array<String>) {
    //单例模式
    BigHeadSon.washing()
}

 枚举的使用:

package DL

enum class Week {
    星期一,星期二,星期三,星期四,星期五,星期六,星期日
}

fun main(args: Array<String>) {

    println(  Week.星期一.ordinal)//获取元素位置
}

 印章类型:个人感觉像是内部类

枚举更在意数据,sealed更在意数据类型。


原文地址:https://www.cnblogs.com/q1359720840/p/10591232.html