我正在阅读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();
}
我没有得到任何错误。我不理解的是什么?
答案 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
的调用,那么它将打印两者。