这几天特忙,好吧,又在为自己找借口了。再不更,Kotlin就真的从入门到放弃了,不,还没入门!继续走起Kotlin基础。
Kotlin:我还没出手,你就倒下了!
我:不,我能坚持,我没有倒下
一、对象
对象的定义
//只有属性
class Rect(var width:Int, var height:Int)
//属性和行为
class Person(var mouth:String, var footer:String) {
fun say() {
println("用${mouth}说话")
}
fun run() {
println("用${footer}走路")
}
}
调用:
fun main(args: Array<String>) {
//实例化对象
var rect = Rect(40, 10)
println("长方形的宽:${rect.width}")
println("长方形的高:${rect.heigth}")
var person = Person("嘴", "脚")
person.say()
person.run()
}
运行结果:

二、继承
继承即时一个类继承另一个类的属性和行为。
//猫父类,属性是嘴和爪子
open class BigCat {
var mouth:String = "嘴"
var footer:String = "爪子"
open fun say() {
println("${mouth}说话:大喵喵")
}
}
//子类猫,继承父类猫,同样有嘴和爪子,但是说话喵喵喵是猫独有的
class Cat : BigCat() {
override fun say() {
println("${mouth}说话:小喵喵")
}
}
调用:
fun main(args: Array<String>) {
var cat = Cat()
println(cat.mouth)
println(cat.footer)
cat.say()
}
结果:

三、抽象
抽象类的定义:
//定义了一个动物的抽象类
abstract class Animal(var name:String) {
abstract fun say()
}
//定义了实现类狗
class Dog(name:String) : Animal(name) {
override fun say() {
println("${name}说:汪汪汪")
}
}
//定义了实现类猴子
class Monkey(name:String) :Animal(name) {
override fun say() {
println("${name}说:绵绵绵")
}
}
调用:
fun main(args: Array<String>) {
var dog = Dog("狗")
dog.say()
var monkey = Monkey("猴子")
monkey.say()
}
结果:

四、多态
同种功能,不同的形态。
例如上面的例子:
fun main(args: Array<String>) {
var dog1 = Dog("金毛犬")
dog1.say()
var dog2 = Dog("拉布拉多犬")
dog2.say()
}
结果:

五、接口
接口定义:
interface IMan {
fun getName()
}
接口实现:
class Man :IMan {
override fun getName() {
println("我的名字叫阿西吧")
}
}
调用及结果:
fun main(args: Array<String>) {
var man = Man()
man.getName()
}

说到这里,大家觉得接口和抽象类的区别是什么呢?
笔者认为:
接口是事务的能力; 抽象类是事务的本质。
例如:
abstract class Human() {
abstract fun say()
}
调用:
class Man:Human(),IMan {
override fun getName() {
println("我的名字叫阿西吧")
}
override fun say() {
println("***")
}
}
六、代理和委托
关键字:by
七、单例
关键字:Object
八、枚举
关键字:enum
未完待续...