Interface als Instanzvariable = gutes Design

kossy

Bekanntes Mitglied
Hallo nochmal !

Ich stehe in meinem System davor eine konkrete Klasse mittlerweile an mehreren Stellen zu verwenden. Bisher habe ich sie in anderen Klasse immer über eine Referenzvariable von exakt demselben Typ der Klasse selbst angesprochen.

Bisher sind die Methoden in der Klasse immer dieselben, so dass ich nun überlege, an Aufrufstellen nicht mehr eine Referenzvarable vom Typ dieser Klasse zu verwenden, sondern ein Interface, welches diese Klasse implementiert.

So weit so gut, aber u.U. könnten auch noch weitere Methoden in der Klasse dazukommen. Wäre das vielleicht eine abstrakte Oberklasse sinnvoller, auch wenn die Vererbung das Risiko von unerwünschten Nebeneffelten beinhaltet? Oder ist ein Interface als Referenzvariable der bessere Weg auch unter Berücksichtigung, dass weitere Anforderungen programmatisch umgesetzt werden müssen?

Grüße
Kossy
 

Vancold

Aktives Mitglied
Hey


Handelt es sich um ein Objekt das du Referenzierst oder eine Klasse die unabhängig von einem Objekt besteht. (Math.) Wenn das der Fall ist mach alles statisch ;) (also die Methoden)

LG

Rene
 

Marco13

Top Contributor
Oder ist ein Interface als Referenzvariable der bessere Weg

... üblicherweise ja ...

auch unter Berücksichtigung, dass weitere Anforderungen programmatisch umgesetzt werden müssen?


... wo ist dann so gesehen der Unterschied, ob die Klasse oder das Interface erweitert werden?

WICHTIG: Das war eine halb-rethorische Frage: Wenn das Interface von anderen Implementiert werden soll, macht das einen wichtigen Unterschied: Wenn man zum Interface eine Methode hinzufügt, funktionieren die bisherigen Implementierungen nicht mehr (Extension Methods kommen erst ab Java 8). Es kommt etwas auf den Zusammenhang an...
 

kossy

Bekanntes Mitglied
Hallo !

Wäre es evtl. eine Option, ein Interface zu deklarieren, dass dann von einer abstrakten Klasse implementiert wird und meine konrekte Klasse dann von dieser abstrakten Klasse abgeleitet wird (ähnliches Prinzip wie in Java Swing mit den Adapterklassen)?

Also in der abstrakten Klasse stehen dann nur konkrete Methoden drin (also die, die im Interface defineirt sind), aber meine konkrete Klasse unterhalb der abstrakten Klasse muss sich dann nicht um alle Implemntierungen des Interfaces kümmern, das würde dann die abstrakten Klasse erledigen.

In den weiteren Codezeilen innerhalb anderen Klasse würde ich dann trotzdem mit Referenzvariablem vom Typ des Interfaces arbeiten und hier gegen meine konkrete Klasse (und nicht die abstrakte Klasse) referenzieren.

Wäre das eine mögliche und langhaltig gute Option?

Grüße
Kossy
 

timbeau

Gesperrter Benutzer
Ich habe es in einem Projekt von mir so gemacht wie du vorschlägst. Letztendlich sind viele endgültige Klassen sehr groß geworden. Man soll ja eher Komposition denn Vererbung nutzen.

Wie es bei dir aussieht kann ich natürlich nicht genau sagen aber das Monster-Interface mit 200 Methoden ist halt auch nicht so toll.
 
B

bygones

Gast
Hallo !

Wäre es evtl. eine Option, ein Interface zu deklarieren, dass dann von einer abstrakten Klasse implementiert wird und meine konrekte Klasse dann von dieser abstrakten Klasse abgeleitet wird (ähnliches Prinzip wie in Java Swing mit den Adapterklassen)?

Also in der abstrakten Klasse stehen dann nur konkrete Methoden drin (also die, die im Interface defineirt sind), aber meine konkrete Klasse unterhalb der abstrakten Klasse muss sich dann nicht um alle Implemntierungen des Interfaces kümmern, das würde dann die abstrakten Klasse erledigen.

In den weiteren Codezeilen innerhalb anderen Klasse würde ich dann trotzdem mit Referenzvariablem vom Typ des Interfaces arbeiten und hier gegen meine konkrete Klasse (und nicht die abstrakte Klasse) referenzieren.

Wäre das eine mögliche und langhaltig gute Option?

Grüße
Kossy
ich versteh nicht so ganz dein ausgangspunkt, aber nur eine abstrakte Klasse einzufuehren, damit eine Implementierung nicht so viel schreiben muss ist unsinn. Eine abstrakte Klasse sollte genommen werden wenn es mehrere Implementierungen des selben Interfaces gibt, welche Gemeinsamkeiten haben und man somit Redundanz verringern will. Und warum ist diese dann ueberhaupt abstrakt wenn sie alle implementierungen des Interfaces schon macht ?!
 

Marco13

Top Contributor
Ja, so ganz ist nicht klar, worauf sich die Frage bezieht. Üblicherweise geht es ja nicht darum, was man wo übergibt, sondern als was das dort bekannt ist. Zumindest sollte man IMHO tunlichst vermeiden, irgendeine Abstrakte Klasse "bekannt" zu machen, oder anzunehmen, dass man eine solche bekommt (auch wenn man sie natürlich heimlich still und leise verwenden kann).

Als Beispiel: Das ist OK
Java:
class TypeA
{
    private SomeInterface x;
 
    public void setX(SomeInterface x) { this.x = x; }
    public void doSomething() { x.doit(); }
}

Das folgende ist IMHO fragwürdig, weil dann der Sinn des Interfaces etwas verloren geht, und die Abstrakte Klasse überall bekannt ist:
Java:
class TypeB
{
    private SomeAbstractClassImplementingAnInterface x;
 
    public void setX(SomeAbstractClassImplementingAnInterface  x) { this.x = x; }
    public void doSomething() { x.doit(); }
}
(Es hätte den theoretischen Vorteil, dass man weitere Methoden zur abstract class hinzufügen kann, und niemand anderes sich um deren Implementierung kümmern muss, aber das ist SEHR oberflächlich betrachtet und sollte genauer durchgedacht werden)

Und schließlich noch
Java:
class TypeC
{
    private ConcreteClass x;
 
    public void setX(ConcreteClass x) { this.x = x; }
    public void doSomething() { x.doit(); }
}
Was natürlich nicht unüblich ist, aber in bezug auf Erweiterbarkeit und Abstraktion ist's damit u.U. nicht so weit her...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
L Interface & Comparable Java Basics - Anfänger-Themen 15
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
N Interface Interface Erstellung Java Basics - Anfänger-Themen 3
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
K Interface: wie damit arbeiten Java Basics - Anfänger-Themen 4
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
T Vererbung Interface Java Basics - Anfänger-Themen 5
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
B Erste Schritte Wie definiere ich in Java ein Interface? Java Basics - Anfänger-Themen 6
L OOP Interface Prinzip? Java Basics - Anfänger-Themen 6
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
A Frage zu Interface Java Basics - Anfänger-Themen 16
J Interface Java Basics - Anfänger-Themen 3
W Interface Java Basics - Anfänger-Themen 1
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Interface-Methode abrufen? Java Basics - Anfänger-Themen 2
P Vererbung Klasse erbt von abstrakter Klasse implementiert Interface Java Basics - Anfänger-Themen 2
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
P interface Java Basics - Anfänger-Themen 1
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
M Interface als Datentyp Java Basics - Anfänger-Themen 12
K Interface Methoden überschreiben Java Basics - Anfänger-Themen 1
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
G Interface klasse Java Basics - Anfänger-Themen 4
N Interface Interface (sinnvoll) erzeugen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben