Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Extends和Interface具有相同的方法,具有相同的参数,但返回类型不同_Java - Fatal编程技术网

Java Extends和Interface具有相同的方法,具有相同的参数,但返回类型不同

Java Extends和Interface具有相同的方法,具有相同的参数,但返回类型不同,java,Java,在java中,我必须创建一个扩展另一个类并实现接口的类。这是我必须延长的课程 public class Cell { public void receiveRat(RatInterface pRat) { } } 这是我必须实现的接口 public interface HoleInterface { public int[] receiveRat(RatInterface pRat); } 我已经上了这门课 public class

在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扩展了单元格,并且单元格有一个类似于返回类型void的方法。我该怎么办?据我所知,那是不可能的。返回类型冲突。您可以将其中一个方法重命名为类似于
public void getRat(RatInterface pRat){…}
的方法,或者让Cell实现HoleInterface,删除
public void receiveRat(RatInterface pRat){…}
方法,并将其替换为
@Override public int[]receiveRat(RatInterface pRat){…}
方法。若孔延伸单元,它也间接实现了孔接口。像这样:

public class Cell implements HoleInterface {
    @Override
    public int[] receiveRat(RatInterface pRat) {
        return null;
    }

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

Q:你想做什么?如果“Cell.receiveRat()”和“HoleInterface.receiveRat()”是两个不同的东西,那么为什么不给其中一个起不同的名字呢?这是一个赋值,我不能更改名称。我想知道我是否做错了什么,或者我无能为力,只能更改名称?Java中的类不能实现两个具有相同签名(即名称+参数列表)但返回类型不同的方法。请注意,JVM本身在加载和使用这类类类方面没有问题,但Java语言没有明确的方法来构造它们(即使它有时会创建违反此规则的合成方法)。这是您应该与老师讨论的问题。现在,如果可能的话。如果单元格的
receiveRat()
方法返回void,那么当前没有任何东西正在使用返回的内容,所以您可以将其更改为return
int[]
,并且没有任何东西会中断,所以我会这样做。因为这是一个类赋值,OP说他/她被赋予了这些要求:正确的方法是要求讲师澄清。我猜OP可能误解了什么。。。
//Now indirectly implements HoleInterface through Cell
public class Hole extends Cell{
    public Hole() {
    
    }
    @Override
    public int[] receiveRat(RatInterface pRat) {
        return null;    
    }