以接口为参数的Java覆盖抽象类方法

何塞·丹尼尔·查孔·博加林

我有这个抽象类:

public abstract class Foo{
   //some attributes

   public Foo(params){}

   public abstract SomeInterface search(Long id);
   public abstract boolean insert(SomeInterface param);
}

我有以下课程:

public class InterfaceImplementation implements SomeInterface {
  //Some code here
}

然后创建一个Foo的实例:

public class Bar extends Foo{

  public Foo(params){
    super(params);
  }

  @Override
  public InterfaceImplementation search(Long id){
    // some code here
  }
  // The above code compiles

  @Override
  public boolean insert(InterfaceImplementation param){
    // some code specific to the InterfaceImplementation here
  }
  // This function does not compile/
}

那么,我在做错什么,我如何才能实现自己的目标?

格特曼

您的类Bar不会覆盖insert,因为参数类型必须完全匹配。这是因为您的实现采用InterfaceImplementation而不是SomeInterface

您可以做什么来进行编译:

  1. 以一个SomeInterface作为参数Barinsert方法,因为任何子类必须能够处理任何执行SomeInterface,如规定Foo

或者

  1. 在引入泛型SomeInterface以指定参数类型应该是什么。

    public abstract class Foo<T extends SomeInterface>{
    

public abstract boolean insert(T param);

然后,您可以指定T子类中的内容:

public class Bar extends Foo<InterfaceImplementation>{

@Override
public boolean insert(InterfaceImplementation param){

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章