【问题标题】:What is a difference in Java between class B<T> extends A<T> and class B<T> extends A [duplicate]类 B<T> 扩展 A<T> 和类 B<T> 扩展 A 之间的 Java 有什么区别 [重复]
【发布时间】:2020-05-30 14:47:56
【问题描述】:

有什么区别:

// 1
class A<T>
class B<T> extends A

// 2
class A<T>
class B<T> extends A<T>

是否 1 与 Raw Types 相关,例如:

List list = new ArrayList<Integer>();

而 2 是首选形式 ?

【问题讨论】:

  • 不要假设两个类都有一个名为T 的类型变量这一事实意味着Java 知道“这个T 与那个T 相同”。如果是class B&lt;S&gt; extends A 会怎样?还是class B&lt;S, T, U&gt; extends A?你认为 T 对 A 来说是什么?
  • 感谢您的回复。我也从@Donat 的回答中了解到,那些Ts 完全不相关,所以A 不知道B 中的任何类型参数,因此(如果我错了,请纠正我)A 是原始类型,它在内部保存Object

标签: java generics inheritance


【解决方案1】:

第一个扩展了原始类型。那么在B 中没有办法说出A 类中的T 应该是什么类型。 A 中的 TB 中的 T 是不相关的。

第二个扩展A&lt;T&gt;。所以A中的TB中的T指的是同一个类型。

【讨论】: