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

Java多重继承使用两个方法相同但返回类型不同的接口,java,Java,如果我有两个接口具有名为m()的方法,一个接口的返回类型为void,另一个接口的返回类型为int,那么我想在一个类中实现这两个方法,这怎么可能呢 在Java中,方法的返回类型不允许使这些方法不同您不能这样做 在Java中,方法的返回类型不允许使这些方法不同 怎么可能呢 这是不可能的,因为返回类型不是Java中方法签名的一部分,编译器将产生错误 您应该使用不同的方法名称,如mVoid()和mInt()(或添加方法参数以使签名彼此不同) 怎么可能呢 这是不可能的,因为返回类型不是Java中方法签名的

如果我有两个接口具有名为m()的方法,一个接口的返回类型为void,另一个接口的返回类型为int,那么我想在一个类中实现这两个方法,这怎么可能呢


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

您不能这样做

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

怎么可能呢

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

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

怎么可能呢

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


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

这是可能的。如果这些方法采用不同的参数,则可以同时实现它们

例如:


它是可能的。如果这些方法采用不同的参数,则可以同时实现它们

例如:


由于以下类无法编译的原因,这是不可能的

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

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;
            }
        };
    }
}

由于以下类无法编译的原因,这是不可能的

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

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;
            }
        };
    }
}

你不能这样做

在java中,方法的返回类型不允许对这些方法进行更改
如果要执行此操作,请确保在第二个接口中传递伪参数,但不能执行此操作

在java中,方法的返回类型不允许对这些方法进行更改
如果您想这样做,请确保在第二个接口中传递伪参数,如其他人所指出的,如果您有两个这样的接口

interface A {

    void m();
}

interface B {

    int m();
}
一个类不可能同时实现这两种功能。Java8的新功能接口为方法命名,如
getAsDouble
(而不仅仅是
get
),以避免此类问题

如果您使用的是Java8,并且您的接口只有一种方法,那么根本不需要编写
实现
。相反,你可以这样做

class MyClass {

    public void voidMethod() {}

    public int intMethod() { return 42; }
}
然后,
myClass
的实例
myClass
不是
A
B
,但您可以使用方法引用将其视为

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

我不知道这是否解决了您的特定问题,因为您没有给出很多详细信息,但知道这一点很有用。

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

interface A {

    void m();
}

interface B {

    int m();
}
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");
}
}
一个类不可能同时实现这两种功能。Java8的新功能接口为方法命名,如
getAsDouble
(而不仅仅是
get
),以避免此类问题

如果您使用的是Java8,并且您的接口只有一种方法,那么根本不需要编写
实现
。相反,你可以这样做

class MyClass {

    public void voidMethod() {}

    public int intMethod() { return 42; }
}
然后,
myClass
的实例
myClass
不是
A
B
,但您可以使用方法引用将其视为

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

我不知道这是否解决了您的特定问题,因为您没有给出太多细节,但知道这一点很有用。

这些方法不兼容;您不能同时实现这两种方法。您需要(至少)更改方法的签名。这些方法不兼容;您不能同时实现这两种方法。您需要(至少)更改该方法的签名。
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");
}
}