回顾:动物园管理员
本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 31 课,共 57 课。
挑战
中等规划一天的动物园行程。
Animal(name, kg)是抽象类,包含抽象成员species、food和dailyGrams(),以及一个返回Leo the lion: 5700 g meat的方法line()。Lion吃肉,每千克体重每天吃 30 g。Parrot吃种子,每天吃 50 g,与体重无关。Seal吃鱼,每千克体重每天吃 40 g。- 接口
Trainable包含trick()。鹦鹉(Polly says hello)和海豹(Sammy balances a ball)可以接受训练,狮子不可以。 - 扩展函数
List<Animal>.foodTotals()返回每种食物对应的克数,并按食物名称的字母顺序排列:fish 4000, meat 5700。 showLineup(animals)使用类型检查,按顺序返回可训练动物的把戏;如果没有可训练动物,则返回no show。
提供的代码会读取 lion,Leo,190、parrot,Polly,1 或 seal,Sammy,100 这样的行,并打印每个 line() 的结果,接着打印包含总数的 food: 行,以及每个返回的把戏各占一行的 show: 。
你的代码要写在 Animal.kt、Trainable.kt、Lion.kt、Parrot.kt、Seal.kt 和 Functions.kt 中。Main.kt 包含提供的输入/输出代码,不能编辑。
亲手试试
fun main() {
// 提供的输入/输出代码:保持原样
val input = generateSequence(::readLine).toList()
val animals = input.map { line ->
val (kind, name, kg) = line.split(",")
when (kind) {
"lion" -> Lion(name, kg.toInt())
"parrot" -> Parrot(name, kg.toInt())
else -> Seal(name, kg.toInt())
}
}
for (a in animals) println(a.line())
println("food: " + animals.foodTotals())
for (s in showLineup(animals)) println("show: $s")
}
面向对象编程中的所有课
自己练习: Kotlin 在线编辑器