[英]How to use generic to restrict method parameter type in subclass?
我有一個名為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);
}
}
和Student
:
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
對象並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泛型可能有用。
例如,您可以實現以下目標:
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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.