如果我有两个接口,其方法名为m(),则返回类型为void,其他类型为int,我想在一个类中实现这两个方法,应该如何实现
答案 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
不是A
或B
,但您可以通过使用方法引用将其视为。
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");
}
}