所以我有一个班级'MyClass'&两个接口'A'和'B'
public class MyClass implements A, B {
@Override
public void mymethod(){
System.out.println("hello world");
}
}
...
public interface A {
void mymethod();
}
...
public interface B {
void mymethod();
}
从这个界面覆盖什么方法被覆盖?
我认为两者都是?
由于 (学生)
答案 0 :(得分:2)
在这种情况下,它就像只有一种方法。在这种情况下,它将覆盖“两个”方法,因为它们具有完全相同的签名。如果方法有不同的签名(返回类型或某些东西),那么就会出现问题。看看这个答案here
例如:
public class MyClass implements A, B {
@Override
public void mymethod(){
System.out.println("hello world");
}
}
...
public interface A {
void mymethod();
}
...
public interface B {
String mymethod();
}
这会导致问题...
答案 1 :(得分:1)
这既是因为它符合两个接口。
答案 2 :(得分:1)
((A)(new MyClass())).mymethod();
((B)(new MyClass())).mymethod();
输出
hello world
hello world
可以直接测试可以发生的事情。
如果您遇到这种情况,那么A和B之间可能存在一些共同特征,这些特征可以被抽象到A和B都扩展的另一个接口,或者它们之间存在不合需要的共享术语,导致重叠并且可能需要重命名。
答案 3 :(得分:0)
界面只是一份合同。
实施方法MyClass
应该有方法void mymethod()
。
实施B意味着MyClass
应该有一个方法void mymethod()
。
它超越了“两者”,但我不确定这是说出来的正确方法。
这只是填写合同并确保MyClass有正确的方法。