【发布时间】:2015-12-26 10:22:10
【问题描述】:
我有一个名为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 对象并为其添加一个学生时,我只希望它是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泛型可能有用。
【问题讨论】:
标签: java generics inheritance overwrite