2011-01-12 9 views
0

Nur eine einfache Syntaxfrage. Angenommen, wir haben eine Schnittstelle, die wir IMyClass, und eine abstrakte Klasse nennen, die implementiert, die wir AbstractMyClass nennen und erklärt sich wie folgt:Syntaxfrage - Erweiterung abstrakter Klassen, die eine Schnittstelle implementieren

public abstract class AbstractMyClass implements IMyClass { 
} 

Nun, wenn wir eine konkrete Umsetzung von MyClass schaffen, die wir nennen .. .! MyClass gibt es zwei Möglichkeiten, in denen wir es erklären können:

public class MyClass extends AbstractMyClass { 
} 

und

public class MyClass extends AbstractMyClass implements IMyClass { 
} 

Was hier am besten? Ich nehme an, die Antwort darauf ist nur eine Frage der Vorliebe, aber ich wollte nur ein paar Gedanken dazu hören.

Vielen Dank im Voraus,

Joseph.

Antwort

1

Es ist nur eine Frage der Präferenz. FWIW, können Sie Beispiele für beide in der JDK Quelle finden:

public class HashMap<K,V> 
    extends AbstractMap<K,V> 
    implements Map<K,V>, Cloneable, Serializable 

public class ThreadPoolExecutor extends AbstractExecutorService 
+0

Beachten Sie, dass Josh Bloch gesagt hat (kann mich nicht erinnern, wo ich es sah, sorry), dass in Fällen wie 'HashMap' da, er doesn‘ Ich denke, die "Implementes Map " fügt viel hinzu und er würde es auslassen, wenn er es wieder tun würde. – ColinD

+0

Würde er es wieder tun müssen? Was passiert, wenn beim nächsten JDK-Release die 'implements'-Klausel gelöscht wird? Es wäre immer noch binär und quellkompatibel (da die 'implements' sowieso impliziert sind), oder? – Thilo

+0

Führt eine explizite 'implements'' instanceof' (etwas leichter) schneller? – Thilo

2

Die letztere Form ist expliziter über die Tatsache, dass MyClass IMyClass absichtlich und nicht zufällig implementiert. Wenn Sie das betonen möchten, ist diese Form klarer. Es schützt auch vor zukünftigen Änderungen an AbstractMyClass. Vielleicht hört es irgendwann auf, IMyClass zu implementieren.

In den meisten Fällen ist die erste Form ausreichend und extra Ausführlichkeit kauft nichts.

Verwandte Themen