gpt4 book ai didi

java - ConcreteA 不是抽象的,不会重写 Interface 中的抽象方法 doSomething(InterfaceS)

转载 作者:行者123 更新时间:2023-12-01 19:27:17 25 4
gpt4 key购买 nike

我有以下代码:

interface InterfaceA {}

interface InterfaceB extends InterfaceA {

}

interface InterfaceC {
public void doSomething(InterfaceA t);
}

class ConcreteA implements InterfaceC {
public void doSomething(InterfaceB t) {
// Do something
}
}

但我收到以下错误:

ConcreteA不是抽象的,不会重写InterfaceC中的抽象方法insert(InterfaceA)

现在,我的理解是因为 InterfaceB 是从 InterfaceA 扩展而来的,所以我应该能够在需要 InterfaceA 的函数中使用 InterfaceB,但事实并非如此。谁能向我解释为什么这不起作用并指出解决问题的正确方向?

提前致谢!

最佳答案

但是ConcreteA的方法签名与接口(interface)声明不同。Java 编译器期望 InterfaceA 准确地传递给 doSomething 方法。

您需要将其更改为有效的:

class ConcreteA implements InterfaceC {
public void doSomething(InterfaceA t) {
// Do something
}
}

上述声明不会阻止您传递实现 InterfaceB 的对象作为参数,但方法声明必须与 InterfaceC 定义匹配。

或者支持通用类型:

interface  InterfaceC <T extends InterfaceA>  {
void doSomething(T t);
}

class ConcreteA implements InterfaceC<InterfaceB> {
public void doSomething(InterfaceB t) {
// Do something
}
}

关于java - ConcreteA 不是抽象的,不会重写 Interface 中的抽象方法 doSomething(InterfaceS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61119364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com