interface - 不会继承重写的方法

时间:2015-08-02 17:39:24

标签: java inheritance interface

我正在阅读Khalid A. Mughal撰写的Java SCJP书籍(适用于JE6),以及主题7.6界面和页码313,它被赋予了

  

子接口可以覆盖其超接口的抽象方法声明。重写的方法不会被继承。

我无法理解"重写的方法不会被继承。" 表示。我试着这样做:

interface A
{
    void abc();
}

interface B extends A
{
    @Override
    void abc();
}

interface C extends B
{
    void abc();
}

我没有得到任何错误。我不理解的是什么?

1 个答案:

答案 0 :(得分:2)

这仅仅意味着重写的方法可能与超级接口的方法略有不同。例如:

public interface Foo {
    Object doSomething(String input) throws IOException;
}

public interface Bar extends Foo {
    @Override
    String doSomething(String input);
}

正如您所看到的,在子接口中,我不再抛出已检查的异常,并且我保证返回的对象是更具体的类型。 抛出已检查异常的方法不会被继承,因为它被覆盖了。

我没有整个段落的上下文,但是其他相关内容仅适用于实现而非接口,即如果覆盖方法而不显式调用{ {1}},超类的实施不会发生。

例如,如果我有:

super

这个程序只输出:

public class Example {
  public static class Foo {
    public void printSomething() {
      System.out.println("Foo");
    }
  }

  public static class Bar extends Foo {
    @Override
    public void printSomething() {
      System.out.println("Bar");
    }
  }

  public static void main(String[] args) {
    Bar bar = new Bar();
    bar.printSomething();
  }
}

但不是Bar 。如果我添加了对Foo的调用,那么它将打印两者。