Java 实现从具有不同返回类型的两个接口继承的类方法

Java 实现从具有不同返回类型的两个接口继承的类方法,java,class,interface,Java,Class,Interface,我有两个接口和一个实现这两个接口的类: interface A { int test(); } interface B { void test(); } class X implements A, B { public void test() { // ==> Error } public int test() { // ==> Error return 10; } } 为什么我不能在类X中实现方法“test

我有两个接口和一个实现这两个接口的类:

interface A {
    int test();
}

interface B {
    void test();
}

class X implements A, B {
    public void test()  { // ==> Error

    }

    public int test() { // ==> Error
        return 10;
    }
}
为什么我不能在类X中实现方法“test”


<强> Nb:此情况不能通过设计或逻辑来纠正,但我想知道在这种情况下我该怎么办,因为我正处于学习java语言的中间,我想理解这个例子:

,因为返回类型不足以区分两个方法签名,

决议:


更改方法名称或参数列表在同一类中不能有多个具有相同签名的方法,并且签名由方法名称及其参数类型组成


若要使
X
同时实现
A
B
,则
A
B
中的方法之一需要具有不同的名称和/或签名,或者它们需要具有相同的返回类型,并且一个
测试
方法就足够了。

仅返回类型不足以让编译器区分一个或另一个方法。考虑调用该方法的代码:

instanceOfX.test();
应该调用哪一个<代码>无效
因为没有分配结果?如果我想调用
int
方法,但不关心结果,该怎么办


方法签名本身(名称和参数)需要不同,编译器才能区分它们。

返回类型不包含在方法签名中。方法签名包括:

  • 方法名
  • 格式参数
  • 输入参数(如果有)
由于这两个方法具有相同的名称且没有参数,因此它们具有相同的签名。一个类中不能有两个具有相同签名的方法


你只能通过改变该方法的三个方面中的任何一个来解决这个问题。

如果你在现实生活中确实遇到了这个问题,并且你不能修改
A
B
,那么我想我应该让
X
实现其中的一个,并在
X
中定义一个新方法来返回另一个:

class X implements A {
    public int test() { 
        return 10;
    }

    private void testForB() {
        // do whatever you'd do to implement B's "void test()"
    }

    public B asB() {
        return new B () {
            @Override
            public void test() {
                testForB();
            }
        };
    }

}
然后,任何具有类型为
x
的对象
x
,并且需要将其用作
B
的客户端都必须说
x.asB()
。也许不太理想,但这将是一种让事情运转起来的方式


但是,我认为这个问题不太可能在现实生活中出现。

欢迎使用java。方法签名不能仅因返回类型而有所不同。谢谢,但是如果不重命名我的方法“test”,如何解决此问题?因此,此问题没有解决方案,我必须重命名A或B的一个方法?如果不更改接口的至少一个方法,则没有解决方案。