我对接口有一些有趣的问题,请帮我理解这个概念。
我有三个接口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();
}
}
答案 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
}
}
定义一个实现两个接口的类。 这是因为方法实现满足了两个接口的要求。