我有一个名为 Teacher
的父类,定义如下:
import java.util.LinkedList;
import java.util.List;
public class Teacher {
public List<Student> list = null;
public Teacher(String id) {
list = new LinkedList<Student>();
}
public void addStudent(Student tb){
list.add(tb);
}
}
和学生
:
public class Student {
public String getStudentName(){
return "student";
}
}
还有一个扩展Teacher
的子类和一个扩展Student
的子类:
import java.util.List;
public class MathStudent extends Student{
public String getStudentName(){
return "math student";
}
}
public class MathTeacher extends Teacher{
public MathTeacher(String id) {
super(id);
// TODO Auto-generated constructor stub
}
}
显然,MathTeacher
继承了addStudent
方法。
但问题是,当我构造一个 MathTeacher
对象并为其添加一个学生时,我只想它成为一个 MathStudent
而不是 Student
,像这样:
MathTeacher clc = new MathTeacher("a");
MathStudent tc = new MathStudent();
clc.add(tc);
Student student = new Student();
clc.add(student); // I want this line to throw compling error to avoid a Student object is added
我能做什么?我想 java generic 可能有用。
最佳答案
您可以通过以下方式实现它:
public class Teacher <T extends Student> {
public List<T> list = null;
public Teacher(String id) {
list = new LinkedList<T>();
}
public void addStudent(T tb){
list.add(tb);
}
}
public class MathTeacher extends Teacher <MathStudent> {
public MathTeacher(String id) {
super(id);
// TODO Auto-generated constructor stub
}
}
关于java - 如何在子类中使用泛型来限制方法参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835475/