Давайте взглянем на следующий код в 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 ahd, затем снова в интерфейсе ThirdInterface , и этот интерфейс наконец наследуется классом Demo .
В таком случае, какая версия методов show () из вышеуказанных интерфейсов будет включена в класс Demo?Как компилятор может динамически разрешать конкретную версию метода show () во время выполнения?
Мне кажется, что метод show () в последнем интерфейсе в вышеупомянутой иерархии наследования интерфейса (а именно ThirdInterface) будет вызываться компилятором.Если это так, то методы show () в вышеупомянутых двух интерфейсах (а именно, FirstInaterface, SecondInaterface) бесполезны и вообще не служат цели, так как они объявлены в интерфейсах, они сами могут никогда иметьих собственные реализации в любом месте.Когда такой вид наследования интерфейса полезен?