面向对象:
//妹子 性格 声音 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更在意数据类型。