选择包名,然后右键:
选择Class类型,会有class:
选择File类型,不会自动有class:
目录结构:
定义描述抽象类 Person人类:
package cn.kotlin.kotlin_oop05 /** * 抽象类用abstract修饰 * 描述:人类的抽象 */ abstract class Person { /** * 抽象行为用abstract修饰 * 人类到底怎么吃饭🍚的,无法确定,所以先抽象此行为,只要是人就肯定要吃饭(抽象是关注事物本质) */ abstract fun eat() }
描述老师Teacher对象,老师也属于人类:
package cn.kotlin.kotlin_oop05 class Teacher : Person() { /** * 继承了Person抽象类,就必须要用override重写父类抽象类的行为 */ override fun eat() { println("老师讲课累,太饿了,在大口大口的吃饭🍚") } }
描述学生Student对象,学生也属于人类:
package cn.kotlin.kotlin_oop05 class Student : Person() { /** * 继承了Person抽象类,就必须要用override重写父类抽象类的行为 */ override fun eat() { println("学生学习太累太累了,饿成狗了,直接一碗饭一碗饭的倒入口里") } }
main测试方法多态的表现:
package cn.kotlin.kotlin_oop05 fun main(args: Array<String>) { // 父类 personChildClass = new 子类() var personChildClass:Person = Teacher() personChildClass.eat() // 父类 personChildClass = new 子类() personChildClass = Student() personChildClass.eat() // 父类 personChildClass = new N个子类() }
执行结果:
main测试方法多态的表现:
package cn.kotlin.kotlin_oop05 fun main(args: Array<String>) { // listOf<Person> 传递的是Person父类抽象类,所以可以增加所有 Person父类抽象类>子类 var list = listOf<Person>(Student(), Teacher()) for (l in list) { l.eat() } }
执行结果:
如果不传入 Person父类抽象类>子类 编译不通过: