Java: Erweiterung einer Klasse und Implementierung einer Schnittstelle mit derselben Methode
Wahrscheinlich der folgenden kann getan werden (ich bin immer ein Kompilierungsfehler: "Die geerbte Methode A. doSomthing(int) nicht verbergen öffentliche abstrakte Methode in B"):
public class A {
int doSomthing(int x) {
return x;
}
}
public interface B {
int doSomthing(int x);
}
public class C extends A implements B {
//trying to override doSomthing...
int doSomthing(int x) {
return doSomthingElse(x);
}
}
Vorausgesetzt, ich bin ändern darf weder A noch B, meine Frage ist kann ich irgendwie definieren C in einer solchen Weise, dass es Erben von A und B (angenommen, es ist erforderlich für einige framework, C wird eine Instanz von A und B).
Oder wenn nicht, wie möchten Sie arbeiten, um dieses?
Dank!
InformationsquelleAutor der Frage rapt | 2011-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
stellen Sie die Methode public
interface-Methoden sind immer
public
oder nutzen Komposition anstelle von Vererbung
InformationsquelleAutor der Antwort ratchet freak
Die Methode
doSomethis()
ist - Paket-private - in der Klasse A:Aber es ist öffentlichen in die Schnittstelle B:
Compiler ist unter der
doSomething()
geerbt von C aus A, das ist - Paket-private - als die Umsetzung des in B, was öffentlichen. Das ist, warum es zu beschweren -Da, während überschreiben eine Methode kann man nicht verengen die Zugriffsebene der Methode.
Lösung ist einfach, in der Klasse C -
InformationsquelleAutor der Antwort Bhesh Gurung
Dies hat zu tun mit der Sichtbarkeit. Sie sind mit
default
(kein Modifikator) Sichtbarkeit inC
fürmyMethod
aber es muss seinpublic
nach der SchnittstelleB
.Nun könnte man denken, du benutzt die
default
Sichtbarkeit für alle von Ihnen, da wederA
B
nochC
hast du explizit wählen Sie eine derpublic
private
oderprotected
. Jedoch die Schnittstelle verwendetpublic
ob oder nicht, Sie explizit anzugeben, so.InformationsquelleAutor der Antwort Michael McGowan
Einfach die Methode
public
beim überschreiben inC
tun.InformationsquelleAutor der Antwort Costi Ciudatu