Kotlin学习笔记(三)

21、对象

// 普通对象
class Cat(var name:String, var age:Int)

使用:
var mycat = Cat("小花", 1)

// 含有方法的对象
class Cat(var name:String, var age:Int){
	fun speak(){
		...
	}
	private fun xuxu(){ // 私有方法
		...
	}
}

使用:
var mycat = Cat("小花", 1)
mycat.speak() // 对象调方法
mycat.xuxu() // 编译报错,调不到私有方法

22、继承(父类加open)和重写(override)

open class Father {
	var firstName = "李"
	open fun method(){
		...
	}
}

// 继承
class Son : Father(){ // 继承使用构造格式,并在父类加open关键字
	override fun method(){ // 重写父类方法,需要父类方法加open关键字
		...
	}
}

23、抽象类(abstract)和继承

// 抽象类
abstract class Human(var name:String){
	abstract fun eat()
}
// 继承
class Man(name:String) : Human(name) {
	override fun eat(){
		...
	}
}

24、多态

var person1 = Man("小明")
var person2 = Woman("小花")
var list = listOf<Human>(person1, person2) // 都属于Human类型
for(item in list){
	...
}

25、接口(interface)和实现(model1 is Interface1 使用is关键字判断是否属于该类型,和Java中的instanceof类似)
抽象类代表的是事物的本质,接口代表的是事物的能力

// 接口
interface IAnimal{
	fun speak()
}

// 实现类
class Cat : IAnimal {
	override fun speak(){
		...
	}
}

26、代理和委托

// 当调用委托人的接口中方法时,将调用到代理人的接口中该方法
class 委托人 : 接口 by 代理人() {
	// 不做任何重写
}

// 重写接口中方法,可以在调用代理人方法前、后做一些事情
class 委托人 : 接口 by 代理人() {
	override fun methodInInterface(){
		...执行代理人方法前
		代理人().methodInInterface()
		...执行代理人方法后
	}
}

27、单例(object关键字)

object 代理人 : 接口 {
	...
}

class 委托人 : 接口 by 代理人 { // 代理人不再使用构造方法格式
    	override fun methodInInterface(){
    		...执行代理人方法前
    		代理人.methodInInterface() // 这里使用同一个对象,因为代理人是单例了
    		...执行代理人方法后
    	}
}

28、枚举(enum)

enum class Orientation{
	up, down, left, right
}

使用:
Orientation.up // 获得枚举对象
Orientation.up.name // up
Orientation.up.ordinal // 0表示顺序

29、印章类(sealed)

// 为了指定某个类里的可实现类型
sealed class Cat{
	class WhiteCat() : Cat()
	class BlackCat() : Cat()

	fun speak(){
		...
	}
	
}

使用:
var cat : Cat = Cat() // 编译报错,Cat类不能被实例化
var cat1 : Cat = Cat.WhiteCat()
var cat2 : Cat = Cat.BlackCat()

30、闭包(函数式编程,让函数拥有对象的能力)

fun test() : Unit { // 返回值类型为空
	var i = 3
	i++
	println(i)
}

fun test() : () -> Unit{ // 返回值类型为一个函数,函数没有接收参数且返回类型为空
	var i = 3
	return fun(){
		i++
    	println(i)
	}
}

使用:
var demo = test()
demo.i // 编译报错,拿不到i
demo() // demo是个函数,可以调用
demo()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值