【发布时间】:2020-01-25 15:36:44
【问题描述】:
如果接口 B 扩展接口 A,并提供与接口 A 相同的方法,是否意味着该方法覆盖了另一个方法?
编辑:将implements这个词改为extend,因为这是错误的,实际上并不是要写implements hehe...
我在考试中找到的这个示例代码的目的是了解接口之间的扩展是如何工作的,这里要求的是提供 ConcreteClass 的主体,特别是类必须实现哪些方法:解决方案在类的主体,但我不明白的是Interface_Y中的methodY(String z)会发生什么,它是否被Interface_Z中的methodX(String x)覆盖,不应该methodY(String z)也在ConcreteClass 必须实现的方法列表,或者方法名称是否与被覆盖的可能性无关?
interface Interface_X{
public int methodX(int x);
}
interface Interface_Y extends Interface_X{
public void methodY(String z);
public int methodX(int y);
}
interface Interface_Z extends Interface_X{
public void methodX(String x);
public int methodX(int y);
}
abstract class AbstractClass implements Interface_Z, Runnable{
public abstract int methodX();
public int methodX(int c) {
return 0;
}
}
public class ConcreteClass extends AbstractClass{
@Override
public void run(){
}
@Override
public int methodX(){
return 0;
}
@Override
public void methodX(String z){
}
}
【问题讨论】:
-
覆盖,而不是覆盖。但是,是的。新的覆盖旧的。
-
作为一个小提示。一个接口不能实现另一个接口,你的意思是extend。
-
"但我不明白
Interface_Y中的methodY(String z)会发生什么,它会被Interface_Z中的methodX(String x)覆盖" - 这是两种不同的方法,都不会覆盖另一个。为了覆盖方法,签名(即名称和参数类型)必须相等。 --- 代码备注:在Java中,class-enum-和interface-names写在UpperCamelCase(Interface_X-> InterfaceX`) -
看看@khachik 的回答,这解释了原因。
-
@DA 因为as explained by khachik、
ConcreteClass没有实现Interface_Y。
标签: java interface abstract-class