【问题标题】:Why we use @Override while implementing a method from Interface ? Does it really Override the method?为什么我们在从 Interface 实现方法时使用 @Override ?它真的会覆盖该方法吗?
【发布时间】:2016-03-03 07:24:54
【问题描述】:

当我们使用接口中的任何方法时,它会要求我们覆盖所有未实现的方法。我们在实现该方法时也使用了“@Override”注释。它真的叫覆盖吗?因为接口只包含方法定义(没有可执行代码)。界面说,

public interface ITestListener extends ITestNGListener {
  void onTestStart(ITestResult result);
  public void onTestSuccess(ITestResult result);
  public void onTestFailure(ITestResult result);
  public void onTestSkipped(ITestResult result);
  public void onTestFailedButWithinSuccessPercentage(ITestResult result);
}

实现类是

public class TestNGTestBase implements ITestListener{  @Override
    public void onTestStart(ITestResult result) {
//xyz

    }                                                                                              @Override
    public void onTestSuccess(ITestResult result) { /// xyz} @Override
    public void onTestSkipped(ITestResult result) {


    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        // TODO Auto-generated method stub

    }}    

为什么还要强制覆盖接口中的所有方法?

【问题讨论】:

  • 是的,它是压倒一切的。 @Override 表示法确保该方法确实是一个被覆盖的方法,并且如果其中任何方法的方法签名发生变化并且不再有适合该签名的方法,则会产生编译时错误。

标签: java interface overriding implements


【解决方案1】:

是的,该方法是从超类覆盖的。如果任何这些方法的方法签名发生变化,这种表示法将产生编译时错误。

覆盖是使用继承时可用的一项功能。

当一个从另一个类扩展而来的类想要使用父类的大部分特性并且想要在某些情况下实现特定功能时使用它。

【讨论】:

    【解决方案2】:

    @Overriding 确保方法是正确的覆盖,如果它不是有效的覆盖,则会给出编译时错误。 在一个类中重写接口的所有方法不是强制性的,在这种情况下你需要声明类“抽象”。

    但是如果你想要一个具体的类(可以被实例化)来实现一个接口,你需要在这个具体的类中实现你接口的所有方法

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多