Werfen wir einen Blick auf den folgenden Code in 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();
}
}
Der obige Code in Java zeigt eine mehrstufige Vererbung von Schnittstellen, bei der ThirdInterface hat zwei Schnittstellen über sich. Die Methode show() wird erstens in der Schnittstelle SecondInaterface ahd dann wieder in der Schnittstelle ThirdInterface und diese Schnittstelle wird schließlich von der Klasse geerbt Demo .
Welche Version der show()-Methoden aus den oben genannten Schnittstellen wird in einem solchen Szenario von der Klasse Demo übernommen? Wie ist der Compiler in der Lage, eine bestimmte Version der show()-Methode dynamisch zur Laufzeit aufzulösen?
Ich denke, dass die show()-Methode in der letzten Schnittstelle in der obigen Schnittstellenvererbungshierarchie (nämlich ThirdInterface) vom Compiler aufgerufen wird. Wenn das so ist, dann sind die show()-Methoden in den beiden oben genannten Schnittstellen (nämlich FirstInaterface, SecondInaterface) nutzlos und dienen überhaupt keinem Zweck, da sie innerhalb von Schnittstellen deklariert sind, sie selbst können niemals überall ihre eigenen Implementierungen haben. Wann ist eine solche Art der Schnittstellenvererbung sinnvoll?