重写方法必须:
-
同名
-
具有完全相同的参数类型;子类型不起作用!
-
具有相同或更广泛的可见性(因此受保护->公共是允许的,受保护->私人是不允许的)
-
具有相同的返回类型或子类型
你违反了第二条规则。幸运的是,您可以使用泛型来解决这个问题:
interface BaseRepository<E extends Entity> {
public void save(E entiy);
}
class StudentRepository implements BaseRepository<Student> {
@Override
public void save(Student student) {
// student validation code
// save the entity
}
}
class CourseRepository implements BaseRepository<Course> {
@Override
public void save(Course course) {
// course validation code
// save the entity
}
}
现在,一个
BaseRepository<Student>
public void save(Entity)
但是
public void save(Student)
.类似地
BaseRepository<Course>
应该覆盖不是吗
公共作废保存(实体)
但是
public void save(Course)
.