当我在某个kotlin项目的中间工作时,我感到困惑,例如子类是实现另一个父类还是实现接口?就像我从jar中使用了一些我不太了解的接口和类一样,由于我是kotlin的新手,有人可以向我解释解决此问题的方法。
例如:
类定义
abstract class Employee (val firstName: String, val lastName: String) {
abstract fun earnings(): Double
}
由其他一些类扩展
abstract class Employee (val firstName: String, val lastName: String) {
// ...
fun fullName(): String {
return lastName + " " + firstName;
}
}
类似的界面
class Result
class Student
interface StudentRepository {
fun getById(id: Long): Student
fun getResultsById(id: Long): List<Result>
}
接口实现
class StudentLocalDataSource : StudentRepository {
override fun getResults(id: Long): List<Result> {
// do implementation
}
override fun getById(id: Long): Student {
// do implementation
}
}
答案 0 :(得分:5)
在Kotlin中,要从一个类继承,您必须编写其主要构造函数,因此您总是会看到父类,后跟()
,有时里面有东西。
接口不需要此。您只需编写接口的名称即可。
因此,如果在名称后看到方括号,则为父类。否则它是一个接口。
答案 1 :(得分:1)
考虑以下示例:
abstract class Employee(val firstName: String, val lastName: String) {
abstract fun earnings(): Double
}
interface Hireable {
fun hire()
}
class HireableEmployee(firstName: String, lastName: String) : Employee(firstName, lastName), Hireable {
override fun earnings(): Double {
return 10000.0
}
override fun hire() {
//...
}
}
您可以看到父类是通过构造函数调用Employee(firstName, lastName)
声明的,接口声明Hireable
后面带有 no 括号。
因此在Kotlin中,extends
对应于名称后面的()
,表示这是构造函数调用,因此是父类。 implements
没有特殊的语法,只有名称。
有关接口的更多信息,请参见https://kotlinlang.org/docs/reference/interfaces.html
关于类层次结构,请参见https://kotlinlang.org/docs/reference/classes.html