当前位置: 首页 > 知识库问答 >
问题:

以基类作为参数重写错误的方法

高吉星
2023-03-14

我有以下代码:

interface Entity {
    
}
class Student implements Entity{
    
}
class Course implements Entity{
    
}

interface BaseRepository {
    public void save(Entity entiy);
}

class StudentRepository implements BaseRepository {
    @Override
    public void save(Student student) {
        // student validation code
        // save the entity
    }
}
class CourseRepository implements BaseRepository {
    @Override
    public void save(Course course) {
        // course validation code
        // save the entity
    }
}

当我试图编译它时,会出现以下错误:StudentRepository不是抽象的,并且不会覆盖BaseRepository中的抽象方法save(Entity)

java不接受“基类”作为参数吗?原因是什么?有没有其他方法来编写代码?

共有1个答案

熊博远
2023-03-14

重写方法必须:

  • 同名

你违反了第二条规则。幸运的是,您可以使用泛型来解决这个问题:

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

 类似资料:
  • 所以,问题是:我有一个抽象基类(),它有一个抽象成员方法()。方法返回布尔值,并应检查是否相等,但“相等”在子类中可能有不同的解释,因此我不重写或。因为它测试是否与另一个与其类型相同的对象相等,所以签名如下所示: 现在,当我试图在类中重写它时,假设“”,我不能使用作为参数的类型。我知道一般情况下这样做的原因和添加类型界限的建议,但是事情变得更加复杂,因为参数类型是它自己的类。 有没有什么平滑的方法

  • 问题内容: 我正在寻找此代码将输出: 但是我得到了: 我了解在B的上下文中,A.f1(String)中的“ this”是B的实例。我是否可以选择执行新的链B1()。f1(String)->(A’s)f1(String)->(A’s)f1(int,String)? 这是一个理论问题,实际上,解决方案显然是在A中实现f1(String)和f1(int,String)都将调用的私有函数。 谢谢你, 马克

  • 我得到的错误:java.lang.NoSuchMEDExcture: 这是我的密码

  • 有一个带有一些功能的接口。基类实现接口。然后在子类中重写函数。 但是@override给出了编译器错误“方法不从其超类重写方法” 问题:在子类中,如何覆盖基类中实现的接口函数? }

  • 在java中,我们可以缩小返回类型和throws异常类型(甚至删除throws子句): 但是,参数类型呢(如果A采用< code>T,那么为什么B不采用< code >?超级T)如: 让我们考虑一下我认为完全符合逻辑的这段代码: 所以我要说的是,在使用的代码上下文中仍然有效。