【问题标题】:Interface method shadowing Java接口方法映射 Java
【发布时间】:2012-12-19 13:09:42
【问题描述】:

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

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

}

【问题讨论】:

    标签: java interface shadow


    【解决方案1】:

    答案是:没关系。

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

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

    【讨论】:

      【解决方案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
          }
      }
      

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

      【讨论】:

        猜你喜欢
        • 2020-11-09
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 2011-04-03
        • 1970-01-01
        • 2022-08-19
        相关资源
        最近更新 更多