ich die folgenden Klassen und Schnittstelleneine nicht abstrakte Klasse erweitern und eine Schnittstelle mit dem gleichen Verfahren Signaturen in einer Klasse Umsetzung
public class A {
public void printSomething() {
System.out.println("printing from A");
}
}
interface B {
public void printSomething();
}
public class C extends A implements B {
public static void main(String aa[]) {
C c = new C();
c.printSomething();
}
}
habe, wenn ich den obigen Code zu kompilieren, kompiliert es ohne Fehler. Und wenn ich das Programm starte, druckt es Folgendes.
printing from A
Ich hatte erwartet, den Compiler einen ähnlichen Fehler wie der folgende Fehler zu geben, die ich habe, wenn meine Klasse C nicht Klasse A
C.java:1: error: C is not abstract and does not override abstract method printSomething() in B public class C implements B{
^
C.java:8: error: cannot find symbol
c.printSomething();
^
symbol: method printSomething()
location: variable c of type C
2 errors
erweitern wusste ich, dass, wenn eine Klasse implementiert ein Interface müssen wir dann die Interface-Methoden in der Klasse definieren oder die Klasse abstract deklarieren. Aber dann, wie nur durch die Erweiterung einer Klasse (mit einer definierten Methode der gleichen Signatur) bin ich in der Lage, diese Compiler-Warnung zu überwinden und das Programm ebenfalls auszuführen.
Es ist, weil Sie diese Methode aus der Superklasse erben. Die Methode muss zur Verfügung gestellt werden, und durch Vererbung ist es – Stultuske
Warum haben Sie das erwartet? Vererbung bedeutet, dass ein "C" als ein "A" behandelt werden kann; und 'A' hat diese Methode ... –
die' interface' Kräfte Implementierung haben Sie Zugang zu dem in der 'interface' in der Klasse definiert haben, nicht wirklich zu haben, es in der Klasse geschrieben, die die' interface' nicht implementiert . Wenn die Klasse von einer Klasse erbt, die die Methode bereits definiert hat und auf die sie zugreifen kann, werden die Bedingungen erfüllt und Sie müssen die Methode nicht erneut überschreiben. – SomeJavaGuy