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