扩展类y的java类x(实现接口z)是否也应该实现接口z

时间:2014-03-04 14:23:37

标签: java inheritance polymorphism

我有一个界面z。它由y类实现。我有另一个继承y类的类x。由于y实现了类z指定的契约,因此x执行相同的操作,因为它扩展了类y。它是否应该实现接口z?

3 个答案:

答案 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)。