【发布时间】:2017-05-10 15:39:16
【问题描述】:
我有一个通用接口A<T>,我有一个实现A<String> 的B 类。我创建了一个类C,它扩展了B 并实现了A<Number>。
对于 C ,我收到编译错误消息:
A cannot be inherited with different type arguments <String> and <Number>.
为什么不允许这样做? 如果这个问题的答案是类型擦除,那么请详细解释一下。
示例代码:
public interface A<T> {
}
public class B implements A<String> {
}
public class C extends B implements A<Number> {
}
【问题讨论】:
-
如果您提供了一个可以使用的代码框架,回答这个问题会稍微容易一些。没什么大不了的,但足以重现您面临的相同错误。
-
@Raj 在问题中请
-
怎么可能?想想看。 C 已经通过 B 实现了 A
。 -
C 已经通过 B 实现了 A
,但它没有实现 A 。 -
C 已经通过 B 实现了 A
,但它没有实现 A 。如果你只是创建一个非泛型类和非泛型接口 A, B,C ;你可以这样做 B 实现 A 和 C 扩展 B 实现 A——这对于非泛型是完全有效的。
标签: java generics inheritance interface subclass