有两个不同的概念。当你写
public class ShapeAction<T>
这意味着您正在创建一个类,该类在实例化时将被某个类参数化。您不知道当时的情况,因此您将其称为
T。
但是当你写
public class Circle extends ShapeAction<T>
这意味着您想
Circle成为
ShapeAction类型为参数化的子类
T。但是什么
T呢?编译器无法告诉您:您声明时
Circle没有任何类型变量。
您有两个选择。您也可以使Circle通用:
public class Circle<T> extends ShapeAction<T>
这样,当您创建新实例时,
Circle可以指定它使用的类型,并且扩展到超类。
如果要指定ShapeAction可以是任何类型,但又不使子类通用,该怎么办?用途
Object:
public class Circle extends ShapeAction<Object>
这种方式
Circle保持非通用性,但是您可以在超类中使用任何数据类型。



