如何区分kotlin和#x27;kotlin在这里使用(:)表示类继承(在java中扩展)和接口实现(在中实现)? 当我在一些KOTLIN项目的中间工作时,我困惑了一个子类是否实现了另一个父类,或者实现了一个接口?就像我使用的是jar中的一些接口和类,我对此不太了解。既然我是kotlin的新手,有人能给我解释一下解决这个问题的方法吗 例如: 类定义 abstract class Employee (val firstName: String, val lastName: String) { abstract fun earnings(): Double }
它被其他类扩展了如何区分kotlin和#x27;kotlin在这里使用(:)表示类继承(在java中扩展)和接口实现(在中实现)? 当我在一些KOTLIN项目的中间工作时,我困惑了一个子类是否实现了另一个父类,或者实现了一个接口?就像我使用的是jar中的一些接口和类,我对此不太了解。既然我是kotlin的新手,有人能给我解释一下解决这个问题的方法吗 例如: 类定义 abstract class Employee (val firstName: String, val lastName: String) { abstract fun earnings(): Double },java,kotlin,Java,Kotlin,它被其他类扩展了 abstract class Employee (val firstName: String, val lastName: String) { // ... fun fullName(): String { return lastName + " " + firstName; } } 类似于一个接口 class Result class Student interface StudentRepository { fun
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>
}
类结果
班级学生
界面研究{
有趣的getById(id:Long):学生
有趣的getResultsById(id:Long):列表
}
接口实现
class StudentLocalDataSource : StudentRepository {
override fun getResults(id: Long): List<Result> {
// do implementation
}
override fun getById(id: Long): Student {
// do implementation
}
}
class StudentLocalDataSource:StudentRepository{
覆盖有趣的getResults(id:Long):列表{
//执行
}
覆盖有趣的getById(id:Long):学生{
//执行
}
}
在Kotlin中,要从类继承,您必须编写其主构造函数,因此您将始终看到父类后面紧跟着()
,有时还有内部内容
接口不需要这个。你只要写下接口的名称就可以了
所以如果你在名字后面看到括号,那就是父类。否则它就是一个接口。考虑以下示例:
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)
声明的,接口声明hirable
后面没有括号
因此,在Kotlin中,extends对应于名称后面的()
,表示这是一个构造函数调用,因此是父类<代码>实现没有特殊语法,只有名称
有关接口的更多信息,请参阅
关于类层次结构,请参见,我认为这很好。扩展类总是包含一个
(..)
,而接口不是。请注意,如果您还没有这样做,您可能希望引入一些编码约定,例如,您在前面编写扩展类,然后是所有实现的接口(这基本上与Java强制您执行的操作相对应)。。。但是你不需要很明显地。。。编码约定有时很有用,有时处理起来过于教条……如果它们使用辅助构造函数而不是主构造函数呢?@CrazyKP你是什么意思?所有类都有一个主构造函数。你能给我一个“使用二级构造函数而不是主构造函数”的类的例子吗?现在我明白了,谢谢你的回答。