java - 在kotlin中将接口(interface)定义为接口(interface)的属性并在接口(interface)实现中提供具体的实现是行不通的

标签 java inheritance kotlin interface

我有接口(interface) A,它有接口(interface) B 作为字段。当我执行 A 的实现(假设是creteA)时,我没有提供接口(interface) B,而是提供了 B 的实现,编译器会抛出错误。我不明白为什么,因为既然 Kotlin 中有继承,我认为这应该可行。顺便说一下,我用数据类尝试过这个。


interface B {
   ....
}

data class concreteB : B {
   .....
}

interface A {
   var someField: B
}

data class concreteA : A {
   //The error happens here, compiler says it's not type of overridden
   override var someField: concreteB
}

最佳答案

您从父亲那里继承了一些东西,这一事实并不意味着您就是您的父亲。

此处数据类的使用有点令人困惑,因为您的代码无法使用它们进行编译。

这是代码工作的正确方式:

interface B

class ConcreteB : B

interface A {
    var someField: B
}

class ConcreteA : A {
    override var someField: B = // That's the interface
        ConcreteB()             // That's the implementation
}

关于java - 在kotlin中将接口(interface)定义为接口(interface)的属性并在接口(interface)实现中提供具体的实现是行不通的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57555797/

相关文章:

Java 注释处理器 - 带注释的 Kotlin 类单元测试

lambda - 无法通过后继函数在 Kotlin 中创建 Int 序列。说 "Type Inference failed"

java - Spring IntegrationFlow 过滤器和转换

java - 优先队列问题

java - JComboBox 的问题

Java继承和方法重载

jquery - 从前置的 div 中删除 .img css

java - 为什么我的子类不继承其父类(super class)的私有(private)实例变量?

java - 开始时的其他 Activity

Java 8 有状态消费者