我有一个界面z。它由y类实现。我有另一个继承y类的类x。由于y实现了类z指定的契约,因此x执行相同的操作,因为它扩展了类y。它是否应该实现接口z?
答案 0 :(得分:1)
没有。如果接口是在当前类的层次结构中的某个位置实现的,那就足够了。
最后,接口只定义了一个类应包含的几个方法。对于你的子类,这与顶级类中的“普通”方法没什么区别。
样品:
public class Main {
public static void main(String[] args) {
new X().test();
new Y().test();
}
}
class X extends Y{
}
class Y implements Z{
@Override
public void test() {
System.out.println("in Y");
}
}
interface Z {
public void test();
}
这将只输出
在Y
在Y
如果我们将X
的定义更改为
class X extends Y implements Z
然后代码仍然可以编译而没有问题,输出保持不变。
如果我们在X
中实现此方法,那么我们将隐藏Y
的方法实现。
答案 1 :(得分:0)
你可以在java.util。*中找到很多这样的例子,例如List - > ArrayList - >的RoleList
答案 2 :(得分:0)
我相信x.isAssignableFrom(z)将为false,除非x在其声明中明确地实现了z。 (即使superClass实现了z)。