Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何区分kotlin和#x27;kotlin在这里使用(:)表示类继承(在java中扩展)和接口实现(在中实现)? 当我在一些KOTLIN项目的中间工作时,我困惑了一个子类是否实现了另一个父类,或者实现了一个接口?就像我使用的是jar中的一些接口和类,我对此不太了解。既然我是kotlin的新手,有人能给我解释一下解决这个问题的方法吗 例如: 类定义 abstract class Employee (val firstName: String, val lastName: String) { abstract fun earnings(): Double }_Java_Kotlin - Fatal编程技术网

如何区分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你是什么意思?所有类都有一个主构造函数。你能给我一个“使用二级构造函数而不是主构造函数”的类的例子吗?现在我明白了,谢谢你的回答。