【发布时间】:2011-11-04 10:23:05
【问题描述】:
让我们看一下Java中的以下代码。
interface FirstInaterface
{
public void show();
}
interface SecondInterface extends FirstInaterface
{
@Override
public void show();
public void someConcreteMethod();
}
interface ThirdInterface extends SecondInterface
{
@Override
public void show();
}
final class Demo implements ThirdInterface
{
@Override
public void show()
{
System.out.println("The show() method invoked");
}
@Override
public void someConcreteMethod()
{
System.out.println("The someConcreteMethod() method invoked");
}
}
final public class Main
{
public static void main(String[] args)
{
Demo demo=new Demo();
demo.show();
demo.someConcreteMethod();
}
}
上面的 Java 代码显示了接口的多级继承,其中 ThirdInterface 上面有两个接口。 show() 方法首先在接口 SecondInaterface 中被重写,然后在接口 ThirdInterface 中再次被重写,该接口最终被类 Demo 继承强>。
在这种情况下,上述接口中的哪个版本的 show() 方法将被类 Demo 合并?编译器如何在运行时动态解析特定版本的 show() 方法?
感觉上面接口继承层次结构中最后一个接口(即ThirdInterface)中的show()方法会被编译器调用。如果是这样的话,上面两个接口(即FirstInaterface,SecondInaterface)中的show()方法是没有用的,根本没有任何作用,因为它们是在接口中声明的,它们本身永远不会在任何地方都有自己的实现。这种接口继承什么时候有用?
【问题讨论】:
标签: java oop inheritance