【问题标题】:Overriding default interface method with abstract method用抽象方法覆盖默认接口方法
【发布时间】:2015-11-27 00:54:08
【问题描述】:

我觉得它很奇怪,想知道它是否是经常使用的东西。什么时候有用?

public interface InterA { 
   Object getInfo() throws Exception1; 
}
public interface InterB {
   public default Integer getInfo(Object s) {return 67;} 
}

public interface InterC extends InterA, InterB {
   @Override public abstract Integer getInfo(Object s);
}

【问题讨论】:

  • 你可以测试这是否使用 javac 编译...
  • @LuiggiMendoza 我做了,它编译。是否经常使用,什么时候有用?
  • 那么您的问题不应该是是否允许这样做。您要求使用此设计的用例。我建议您编辑问题,否则答案将是:是的,这是允许的。

标签: java overriding abstract


【解决方案1】:

当然,您可以这样做。名称本身表明它是abstract。您可以这样做,因为该抽象类的实现类必须覆盖该方法。

当你决定做一个抽象时,你不需要去实现。

【讨论】:

  • 那么实现InterC的类,比如说InterD,必须给出方法的实现吗?那么假设我们有一个InterE,它实现了InterD,InterE可以再次抽象方法吗?
【解决方案2】:

这存在于默认接口方法之前。例如,一个抽象类可以使

    @Override
    abstract public int hashCode();

强制子类为 hashCode 提供实现,可能是因为抽象类施加了额外的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 2017-10-12
    • 2012-07-11
    • 2015-08-20
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多