从零开始学Kotlin第四课

时间:2020-12-25 21:15:42

面向对象:

//妹子          性格                声音
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一样的,继承不一样,案例:

从零开始学Kotlin第四课

父类:

/**
* 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()
}

抽象类:

从零开始学Kotlin第四课

从零开始学Kotlin第四课

接口实现:

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)//获取元素位置
}

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

从零开始学Kotlin第四课

从零开始学Kotlin第四课

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