阴影Java的接口方法

时间:2012-12-19 13:09:43

标签: java interface shadow

我对接口有一些有趣的问题,请帮我理解这个概念。

我有三个接口Itest,Itest3,Itest4。接口Itest扩展了Itest3和Itest4接口。 它们两个接口都有一个共同的方法public void one();现在一个类Test实现Itest接口并覆盖方法one()

现在它继承了哪个接口的方法?如果我想继承特定接口的常用方法怎么办? 和 它对多态性有什么影响?如果另一个类仅继承Itest3该怎么办?我认为这会在运行时中断。

请帮助我了解它的优点是什么?

代码就在这里......

public interface ITest extends Itest4,Itest3 {
    public static interface ITest2{

    }
}

public interface Itest3 {
    public void one();
}

public interface Itest4 {
    public void one();
}

public class Test implements ITest {    

    @Override
    public void one() {
        //Which interface method it overrides?
    }

public static void main(String... arg) {
        new Test();
    }

}

2 个答案:

答案 0 :(得分:4)

答案是:没关系。

接口只是声明,而不是代码。两个接口都声明了方法public void one()。当你有一个实现这个方法的实现类时,它会同时为两个接口实现它。 class Test中的此实现不会覆盖任何内容。这是第一个实现。它可以覆盖的接口中没有实现 - 只有两个相同的声明。

当另一个类实现ITest3时,它需要自己的public void one()实现。就像任何其他实现ITest4或ITest的类一样。你不需要自己的实现的唯一情况是你有一个扩展类Test的类,因为它可以从Test继承实现。

答案 1 :(得分:2)

声明

public interface Itest3 {
    public void one();
}

简单地说明Itest3的任何实现者都将提供一个名为one的方法,不带参数,并返回void。

以完全相同的方式

声明

public interface Itest4 {
    public void one();
}

还声明Itest4的任何实现者都将提供一个名为one的方法,不带参数,并返回void。

仅存在接口以指定行为合同,而不管所述行为的实现如何。 因此,

public class Test implements ITest {    

    @Override
    public void one() {
        //Defines the behavior of both interfaces
    }
}

定义一个实现两个接口的类。 这是因为方法实现满足了两个接口的要求。