首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口方法shadowing Java

接口方法shadowing Java
EN

Stack Overflow用户
提问于 2012-12-19 21:09:43
回答 2查看 282关注 0票数 0

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

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

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

请告诉我这样做的好处是什么?

代码在这里...

代码语言:javascript
复制
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();
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-19 21:14:19

答案是:无关紧要。

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

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

票数 4
EN

Stack Overflow用户

发布于 2012-12-19 21:30:44

该声明

代码语言:javascript
复制
public interface Itest3 {
    public void one();
}

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

以完全相同的方式

该声明

代码语言:javascript
复制
public interface Itest4 {
    public void one();
}

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

接口的存在只是为了指定行为契约,而与所述行为的实现无关。因此,

代码语言:javascript
复制
public class Test implements ITest {    

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13953148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档