0

我在接口方面遇到了一些有趣的问题,请帮助我理解这个概念。

我有三个接口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();
    }

}
4

2 回答 2

4

答案是:没关系。

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

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

于 2012-12-19T13:14:18.967 回答
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
    }
}

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

于 2012-12-19T13:30:44.053 回答