【问题标题】:Extends and Interface has same method with the same parameters but different return types扩展和接口具有相同的方法,具有相同的参数但返回类型不同
【发布时间】:2020-11-18 22:49:54
【问题描述】:

在 java 中,我必须创建一个扩展另一个类并实现接口的类。这是我必须扩展的类

public class Cell  {

    public void receiveRat(RatInterface pRat) {     
    
    } 
}

这是我必须实现的接口

public interface HoleInterface {    
    public int[] receiveRat(RatInterface pRat);
}

我已经上课了

public class Hole extends Cell  implements HoleInterface {

    public Hole() {
    
    }

    @Override
    public int[] receiveRat(RatInterface pRat) {
        // TODO Auto-generated method stub
        return null;    
    }

hole 类中的 int[] 不起作用,因为 Hole 扩展了 Cell,而 Cell 有一个类似的方法,返回类型为 void。我该怎么办?

【问题讨论】:

  • 问:你想要做什么?如果“Cell.receiveRat()”和“HoleInterface.receiveRat()”是两个不同的东西,那你为什么不给其中一个取个不同的名字呢?
  • 这是一项任务,我无法更改名称。我想知道是我做错了什么,还是我无能为力,只能改名字?
  • Java 中的一个类不能实现两个签名相同(即名称+参数列表)但返回类型不同的方法。请注意,JVM 本身在加载和使用这类类方面没有问题,但 Java 语言 没有明确的方式来构造它们(即使有时它创建打破此规则的合成方法)。
  • 这是你应该和你的老师谈谈的事情。现在,如果可能的话。
  • 如果 Cell 的 receiveRat() 方法返回 void,则当前没有使用返回的任何内容,因此您可以将其更改为返回 int[] 并且不会中断,所以我会这样做。跨度>

标签: java


【解决方案1】:

据我所知,这是不可能的。返回类型冲突。您可以做的是将其中一个方法重命名为public void getRat(RatInterface pRat){...} 之类的名称,或者让Cell 实现HoleInterface,删除public void receiveRat(RatInterface pRat) {...} 方法并将其替换为@Override public int[] receiveRat(RatInterface pRat) {...} 方法。如果Hole继承了Cell,它也间接实现了HoleInterface。像这样:

public class Cell implements HoleInterface {
    @Override
    public int[] receiveRat(RatInterface pRat) {
        return null;
    }
//Now indirectly implements HoleInterface through Cell
public class Hole extends Cell{
    public Hole() {
    
    }
    @Override
    public int[] receiveRat(RatInterface pRat) {
        return null;    
    }

但这只是一个想法...如何解决您的问题取决于您要解决的具体任务或问题。

【讨论】:

  • 因为这是一项课堂作业,并且 OP 说他/她被要求满足这些要求:正确的方法是向讲师澄清。我猜 OP 可能误解了一些东西......
猜你喜欢
  • 2013-08-14
  • 2013-07-27
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
相关资源
最近更新 更多