快捷键(针对mac本)
1.格式化代码:option+command+L
代码如下:
fun main() {
println("Hello World")
var rect = WashMachine(19, 5)
println("洗衣机的宽为${rect.width},高为${rect.height}")
rect.open()
rect.close()
rect.workModel(2)
rect.work()
//继承的概念
var son = Son()//子类继承父类,需要在父类类名前以及父类的方法前定义"open"关键字
println("儿子继承妈妈的性格为${son.chactor}")
son.active()
//抽象类的概念
var man1 = Man("张三")//使用"abstract"定义抽象类和方法,继承抽象类,需要重写父类的抽象方法
var man2 = Man("李四")
var listMan = listOf<Man>(man1, man2)//多态的展现形式
for (list in listMan) {
list.eat()
}
//接口以及抽象类的区别,抽象类是事物的本质,接口是事物的能力,继承抽象类需要使用"()",而实现接口不需要
var normalMan = NormalMan("正常人")
var disableMan = DisableMan("残疾人")
var list = listOf<Human>(normalMan, disableMan)
for (man in list) {
if (man is NormalMan) {
man.eat()
man.hasLeg()
} else {
man.eat()
}
}
//委托和代理,将sport接口保存在sportmanager的对象实例(构造器)内部,通过传入sport实例对象来调用接口自身的方法以及sportManger的方法
//参考网址:https://blog.youkuaiyun.com/wzgiceman/article/details/82689135
//网上百度的写法1
var swimSport = SwimSport()
SportManager(swimSport).doSport()
SportManager(swimSport).otherSport()
var runSport = RunSport()
SportManager(runSport).doSport()
//腾讯课堂写法2 视频39节
var otherSport = OtherSport()
otherSport.doSport()
//单例模式的写法 使用 object代替class关键字,创建的时候不用使用()
var single1 = singleClass
var single2 = singleClass
println("单例模式为:"+(single1==single2))
//枚举
println(Week.星期一.ordinal)//下标
//印章(密封)类 印章和枚举区别是 枚举区分的是数据本身,印章区分的是数据类型(类)
var allman1 = ALLHuman.AllMan("张先生")
var allman2 = ALLHuman.AllWoMan("李小姐")
var allman3 = ALLHuman.AllOlder("杨爷爷")
var allList = listOf<ALLHuman>(allman1,allman2,allman3)
for (all in allList){
if (all is ALLHuman.AllWoMan){
all.showYoungName()
}
}
}
//不要忘记定义变量的时候使用var,不然不能直接调用
class WashMachine(var width: Int, var height: Int) {
var isCanWash = false
var model = 0
fun open() {
isCanWash = false
println("洗衣机门打开了")
}
fun close() {
isCanWash = true
println("洗衣机门关掉了")
}
fun workModel(m: Int) {
model = m
}
fun work() {
if (isCanWash) {
when (model) {
0 -> println("请选择模式")
1 -> {
println("轻柔模式开始")
setSpeed(100)
println("洗衣机在工作")
}
2 -> {
println("快洗模式开始")
setSpeed(200)
println("洗衣机在工作")
}
else -> print("模式选择错误")
}
} else {
println("洗衣机门还没关")
}
}
//添加private 代表封装,私有化
private fun setSpeed(speed: Int) {
println("洗衣机转速为${speed}圈/秒")
}
}
//父类
open class mother {
var chactor = "性格开朗"
open fun active() {
println("很爱动")
}
}
//子类继承父类,父类需要在类名前使用open关键字
class Son : mother() {
override fun active() {
println("儿子很安静")
}
}
//定义一个抽象类,它的方法也要定义成抽象的
abstract class Human(var name: String) {
abstract fun eat()
}
//子类继承抽象类,实现抽象方法
class Man(name: String) : Human(name) {
override fun eat() {
println("${name}开始吃饭啦")
}
}
//定义一个接口,判断这个人是否有腿
interface IMan {
fun hasLeg()
}
//这是一个正常人
class NormalMan(name: String) : IMan, Human(name) {
override fun eat() {
println("我是${name},我可以吃饭")
}
override fun hasLeg() {
println("我是${name},有正常的双腿")
}
}
//这是一个残疾人
class DisableMan(name: String) : Human(name) {
override fun eat() {
println("我是${name},我没有腿,但是我也可以吃饭")
}
}
//定义一个运动接口
interface ISport {
fun doSport()
}
//定义一个游泳类
class SwimSport : ISport {
override fun doSport() {
println("这是一项游泳运动")
}
}
//定义一个跑步类
class RunSport : ISport {
override fun doSport() {
println("这是一项跑步运动")
}
}
//通过by(代理)
class SportManager(iSport: ISport) : ISport by iSport {
fun otherSport() {
println("我先代理别人做游泳运动,接着做我自己的运动")
}
}
//代理的第二种写法
class OtherSport : ISport by SwimSport() {
override fun doSport() {
println("我先代理别人做游泳运动,接着做我自己的运动")
}
}
//单例模式
object singleClass
//枚举类
enum class Week{
星期一,星期二,星期三,星期四,星期五,星期六,星期日
}
//印章(密封)类
sealed class ALLHuman(var name:String){
class AllMan(name:String):ALLHuman(name)
class AllWoMan(name:String):ALLHuman(name)
class AllOlder(name:String):ALLHuman(name){
fun showOLdName(){
println("老人姓名为+${name}")
}
}
fun showYoungName(){
println("年轻人姓名为+${name}")
}
}