首页 > 解决方案 > 在子类中定义 List 的类型

问题描述

我有一个abstract class Workout和类WorkoutCircuitWorkoutSNR它继承自Workout.

我也有abstract class Exercise和 类ExerciseCircuitExerciseSNR继承形式Exercise

该类Workout有一个ArrayList<Exercise> exercises, 以及相应的 getter 和 setter 方法。现在我希望能够调用getExercises()一个对象WorkoutCircuit并获得一个ArrayList<ExerciseCircuit>返回,反之亦然WorkoutSNR

我还没有想出如何做到这一点,因为我不能覆盖子类中的方法getExercises()和案例ArrayList<Exercise>ArrayList<ExerciseCurcuit>

标签: java

解决方案


Workout为了允许子类定义List返回的元素的类型,创建一个泛型类是一个很好的例子getExercises()
泛型类允许parametric polymorphism,这是您正在寻找的。
您可以定义Workout如下:

public abstract class Workout<T extends Exercise>{

   private List<T> exercises;
   public List<T> getExercises(){
      return exercices;
   }
   ...
}

子类可能是:

public class WorkoutCircuit extends Workout<ExerciseCircuit>{
   ...     
}

和 :

public class WorkoutSNR extends Workout<ExerciseSNR>{
   ...     
}

请注意,有界类型参数 ( class Workout<T extends Exercise) 的使用不是强制性的。例如class Workout<T>,这将是合法的,这意味着子类可以接受任何类型。
但是指定更精确的类型有两个优点:

  • 它允许限制子类可以使用的可能类型。
  • 它允许抽象类操作特定声明的类型:Exercice而不是Object. 如果该类使用Exercice.

推荐阅读