Java多重继承使用两个接口具有相同的方法但返回类型不同

时间:2016-04-06 12:03:36

标签: java

如果我有两个接口,其方法名为m(),则返回类型为void,其他类型为int,我想在一个类中实现这两个方法,应该如何实现

7 个答案:

答案 0 :(得分:3)

这是不可能的,因为下面的类将无法编译。

您不能有两个具有相同名称和相同参数列表的方法。

public class Clazz {
    public void m() {}
    public int  m() {}
}

解决方案是使用匿名类返回每个接口实例的方法。

public interface One {
    void m();
}

public interface Two{
    int m();
}

public class Clazz {
    One getOne(){
        return new One(){
            @Override
            public void m() {
                // TODO Auto-generated method stub
            }
        };
    }

    Two getTwo(){
        return new Two(){
            @Override
            public int m() {
                // TODO Auto-generated method stub
                return 0;
            }
        };
    }
}

答案 1 :(得分:1)

你不能这样做。

在Java中,返回类型的方法不允许使这些方法不同

答案 2 :(得分:1)

  

应该怎么可能

这是不可能的,因为返回类型不是Java中方法签名的一部分,编译器会产生错误。

您应该使用不同的方法名称,例如mVoid()mInt()(或添加方法参数以使签名彼此不同)

答案 3 :(得分:1)

正如其他人所指出的那样,如果你有两个这样的接口

interface A {

    void m();
}

interface B {

    int m();
}

一个类不可能同时实现这两个。 Java 8的新功能接口为getAsDouble(而不仅仅是get)提供方法名称,以避免此类问题。

如果您使用的是Java 8,并且您的接口只有一种方法,则根本不需要编写implements。相反,你可以这样做

class MyClass {

    public void voidMethod() {}

    public int intMethod() { return 42; }
}

然后,myClass的实例MyClass不是AB,但您可以通过使用方法引用将其视为。

A a = myClass::voidMethod;
B b = myClass::intMethod;

我不知道这是否能解决你的特殊问题,因为你没有提供很多细节,但这是一件有用的事情。

答案 4 :(得分:0)

可能如果方法采用不同的参数,那么就可以实现它们。

例如:

interface A{
    void m();
}


interface B{
    int m(int a);
}

class C implements A,B{
     ...
}

答案 5 :(得分:0)

你不能这样做。

在java中,方法的返回类型不允许使这些方法不同 如果你想这样做,请确保在第二个接口w

中传递伪参数

答案 6 :(得分:0)

interface ParentA {
void play();
}
interface ParentB {
    int play();
}

class Child implements ParentA, ParentB {


public void play() {
    System.err.println("Child ParentA");
}
//ERROR : return type is incompatible with ParentB.play()

//So added method with int return type too

public int play() {
    System.err.println("Child ParentB");
}
}