我有一个abstract class Workout与类WorkoutCircuit和WorkoutSNR从继承Workout.
此外,我有abstract class Exercise和类ExerciseCircuit和ExerciseSNR继承形式Exercise.
该类Workout有一个ArrayList<Exercise> exercises,带有相应的getter和setter方法.现在我希望能够调用getExercises()一个Object WorkoutCircuit并获得一个ArrayList<ExerciseCircuit>返回,反之亦然WorkoutSNR.
我haven't想出如何做到这一点,因为我不能覆盖getExercises()的子类和方法的情况下ArrayList<Exercise>进入ArrayList<ExerciseCurcuit>
创建Workout泛型类是一个很好的例子,以便允许子类定义List返回的元素类型getExercises().
通用类允许parametric polymorphism,这是你正在寻找的.
您可以定义Workout如下:
public abstract class Workout<T extends Exercise>{
private List<T> exercises;
public List<T> getExercises(){
return exercices;
}
...
}
Run Code Online (Sandbox Code Playgroud)
子类可以是:
public class WorkoutCircuit extends Workout<ExerciseCircuit>{
...
}
Run Code Online (Sandbox Code Playgroud)
并且:
public class WorkoutSNR extends Workout<ExerciseSNR>{
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,使用有界类型参数(class Workout<T extends Exercise)不是必需的.例如,class Workout<T>这将是合法的,这意味着子类接受任何类型.
但是指定更精确的类型有两个好处:
Exercice而不是Object.如果类使用特定方法在列表上提供一些处理,这可能会有所帮助Exercice. | 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |