Interface mehrfach implementieren

Status
Nicht offen für weitere Antworten.
G

Glassghost

Gast
Schönen guten Tag

vielleicht hab ich ja nur Tomaten auf den Augen oder aber das was ich will, geht prinzipiell nicht, mal sehen.

Ich versuch mich grad an nem eigenen Compiler. Habe (in etwa) für jedes Nonterminal meiner EBNF eine "accept-" Methode geschrieben, die dann für die Nonterminals auf ihrer rechten Regelseite wiederum die entsprechenden "accept-" Methode(n) aufruft, je nach Regel eben.

Um den Syntaxbaum aufzubauen, liefert jeder "accept-" Methode einen Knoten an den Aufrufer zurück, so dass sozusagen der Parent- Node die Verantwortung hat seine Kinderchen einzusammeln, in etwa so:

acceptCompileUnit
--> acceptComponent : ComponentNode
-------> acceptInterfaceList : InterfaceListNode
-------> acceptMember : MemberNode
------------> acceptType : TypeNode
...

Für jedes Nonterminal gibts ne eigene Node-class, die alle dasselbe IF (NodeIF) implementieren.

Okay, zunächst bin ich mir eben designtechnisch unschlüssig, ob es so gut ist, die Knoten über den Rückgabewert einzusammeln. Prinzipiell würd ich die Verantwortung schon gern in der Methode lassen, die zum Parent gehört, aber den Rückgabewert würd ich gern sinnvoller nutzen. Alternativ wärs eben auch denkbar, den Vater als Parameter mitzugeben und somit die Verantwortung an die "accept-" Methode des Kindknotens weiter zu geben.

Mein eigentliches Anliegen:
Im Moment hat jede konkrete Node - Klasse auch ihre getter / setter Methode(n) für die einzelnen Kindknoten. Was ich jetzt in erster Linie gern wissen würde: Gibt's ne Möglickeit in einem Interface etwa folgende Methode zu definieren:

Code:
interface NodeIF {
   void setChild(JoiNodeIF child);
}

und diese dann - bei Bedarf eben auch mehrfach - so zu implementieren (z.B. für meine Klasse ComponentNode):

Code:
public class ComponentNode implements NodeIF {
   void setChild(JoiNodeInterfaceList child) {
      this.ifList = child;
   }

   void setChild(JoiNodeMember child) {
      this.member = child;
   }
   
}

Das es SO nicht geht, ist mir schon klar, aber ich wollt eben zum Ausdruck bringen, was ich gern hätte... hoffe das ist mir einigermaßen geglückt.

Vielen Dank für die Hilfe,
Bob
 
S

SlaterB

Gast
warum so unsinnig fremde Klassen, warum kein fertiges Programm?
ist doch nicht so schwer..

Code:
public class Test2
    implements Lister
{

    public static void main(String[] args)
    {
        Test2 test = new Test2();
        ArrayList l = new ArrayList();
        test.doList(l);
        List l2 = l;
        test.doList(l2);
        
        Lister test2 = test;
        test2.doList(l);
        
    }

    public void doList(ArrayList list)
    {
        System.out.println("ArrayList: " + list);
    }

    public void doList(List list)
    {
        System.out.println("List: " + list);
    }

}


interface Lister
{

    public void doList(List list);
}

zu beachten ist, dass in meinem Beispiel zweimal die allgemeine Operation benutzt wird,
obwohl es immer die Unterklasse ArrayList ist,

wenn man das ganze also allgemein einsetzt, werden deine mehreren Operationen nicht genutzt
 
G

Guest

Gast
Hallo SlaterB,

danke für die schnelle Antwort.

warum so unsinnig fremde Klassen, warum kein fertiges Programm?

Sorry, aber ich versteh nicht, was Du mit "...unsinnig fremde..." und "... fertiges Programm?" meinst.

ist doch nicht so schwer..

Tja, das hängt halt immer von den Fähigkeiten des Einzelnen ab.

Danke auch für dein Codebeispiel, ich glaube mir ist dadurch klar geworden, dass das, was ich gerne hätte , wohl doch nicht geht...

Denn wenn ich mich nicht irre, wird beim Aufruf in Zeile 15 dann der Code von

Code:
public void doList(List list)

ausgeführt.
Ich hätt's halt gern, dass aufgrund des Typs des Parameters (in diesem Fall ist der Typ ja ArrayList) die entsprechende Methode gewählt wird (das ginge natürlich, wenn man das Interface weg liese, überladen halt, aber ich brauch das IF zum Syntaxbaum traversieren). Da aber der Typ von "test" Lister ist, wird logischerweise die Implementierung des Interfaces ausgeführt... wenn ich dort jetzt eine Operation von ArrayList ausführen wollte, müsst ich erst wieder auf den Typ prüfen und entsprechend casten...


Danke trotzdem,

Bob
 
S

SlaterB

Gast
was du da in den letzten Zeilen beschreibst, wird in meinem Programm ganz deutlich,

und dafür brauch man eben keine seltsamen eigenen Interfaces,
List und ArrayList tun es genauso, die kennt jeder,

und was gibts an 'fertiges Programm' nicht zu verstehen?
meins ist fertig, einfach kopieren, laufen lassen, deins nicht

wenn du so ein Programm wie meins geschrieben hättest,
wären dir vielleicht schon die Fehler aufgefallen,
oder ich hätte nur noch den einzigen intelligenten Teil

Code:
        Test2 test = new Test2(); 
        ArrayList l = new ArrayList(); 
        test.doList(l); 
        List l2 = l; 
        test.doList(l2); 
        
        Lister test2 = test; 
        test2.doList(l);
hinzufügen müssen,

dann ginge es also viel schneller voran in der Fragebearbeitung ;)
 
G

Guest

Gast
Hallo nochmal,

was du da in den letzten Zeilen beschreibst, wird in meinem Programm ganz deutlich

stimmt, klar wird's deutlich, drum hab ich mich ja auch bei Dir bedankt, denn erst durch dein Programmbeispiel bin ich da drauf gekommen :toll:
Manchmal brauch ich einfach jemanden, der den nötigen Abstand hat und der mir das eigentlich Offensichtliche dann vor die Nase hält, in dem Fall hast Du mir den Gefallen getan, danke nochmal.

und dafür brauch man eben keine seltsamen eigenen Interfaces,
List und ArrayList tun es genauso, die kennt jeder,

Naja, ich hab mich da halt für ein eigenes Interface entschieden, was mit dem etwas umfangreicheren Gesamtkonzeot des Compilers und der Aufgabenstellung zu tun hat. Allein die Traversierung nach dem Visitor pattern schien mir bei der Entwurfsentscheidung dadurch einfacher, vielleicht war das eine Fehlentscheidung, ich werd's überdenken. Danke trotzdem für deinen Einwurf es mit ArrayList bzw. List zu versuchen.

und was gibts an 'fertiges Programm' nicht zu verstehen?
meins ist fertig, einfach kopieren, laufen lassen, deins nicht

Hmm.. sorry, aber ich kann allgemein deinen scharfen Ton nicht nachvollziehen, ich wollt Dich auf keinen Fall angreifen, ich hab deinen Satz einfach im Kontext nicht verstanden, wenn Du Wert auf eine "Komplettheit" bei den Codeabschnitten legst, solltest Du das auch bei den textuellen Teilen tun und in ganzen Sätzen schreiben, dann gibt's da vielleicht auch weniger Missverständnisse ;)

wenn du so ein Programm wie meins geschrieben hättest,
wären dir vielleicht schon die Fehler aufgefallen,

Da ist bestimmt was dran, ich mach's beim nächsten Mal bevor ich mich hier wieder ins Forum begebe.

Ansonsten gibt's meiner Meinung nach keinen Grund für Sarkasmus.

Bob
 
S

SlaterB

Gast
> Da ist bestimmt was dran, ich mach's beim nächsten Mal bevor ich mich hier wieder ins Forum begebe.


das ist alles was ich erreichen wollte ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Interface, aber die Methoden bleiben teilweise gleich Allgemeine Java-Themen 35
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
OnDemand Interface imlementieren Allgemeine Java-Themen 4
Buroto Interface Allgemeine Java-Themen 2
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B JaxB und @XmlIDREF mit Interface Allgemeine Java-Themen 1
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
Kirby.exe Autocloseable Interface Allgemeine Java-Themen 2
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
mrBrown Namensfindung Fluent-Interface Allgemeine Java-Themen 0
J Logik in Interface Allgemeine Java-Themen 2
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B eigenes Consumer Interface Allgemeine Java-Themen 0
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
N GUI Interface, swing Allgemeine Java-Themen 7
Thallius Konzeptproblem User-Interface Allgemeine Java-Themen 5
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Problem mit Generics und Interface Allgemeine Java-Themen 4
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface einer Library implementieren Allgemeine Java-Themen 3
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
F Interface IInterface oder Interface? Allgemeine Java-Themen 3
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
T Interface Probleme Allgemeine Java-Themen 8
M Queues und Queue Interface Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
pg1337 Interface-Frage Allgemeine Java-Themen 24
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
K Interface Interface comparable machen Allgemeine Java-Themen 9
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Trick für Compilerfehler bei fehlendem Interface Allgemeine Java-Themen 12
X Interface - Klasse einladen Allgemeine Java-Themen 6
G Interface -> InterfaceImplementierung Allgemeine Java-Themen 3
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
R Interface instanzieren Allgemeine Java-Themen 8
B Frage zu Interface und List Allgemeine Java-Themen 4
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
S normale vererbung als interface Allgemeine Java-Themen 2
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: Allgemeine Java-Themen 3
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Interface und von Thread ableiten Allgemeine Java-Themen 6
R Interface Serializable technische Begrenzung Allgemeine Java-Themen 2
T Interface-Referenz Allgemeine Java-Themen 2
L interface abstrakte klasse Allgemeine Java-Themen 21
S Interface Geschäftslokik & GUI Allgemeine Java-Themen 6
G Interface zwischen 2 Programmierern Allgemeine Java-Themen 10
C Schnittstellen(interface) Allgemeine Java-Themen 9
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
D javadoc interface + implementation + @overrides Allgemeine Java-Themen 16
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
G class, interface, or enum exp? Allgemeine Java-Themen 2
S Interface Klasse überladen. Allgemeine Java-Themen 2
K Inneres Interface äußere Klasse Allgemeine Java-Themen 7
T Frage zu interface und "guter Programmierstil" Allgemeine Java-Themen 4
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
S Frage zu Interface Allgemeine Java-Themen 7
J Objektorientiert - Interface & Klassen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
T "Programming against the interface" sinnvoll? Allgemeine Java-Themen 18
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
A Was ist der genau Sinn eines Interface? Allgemeine Java-Themen 13
E Oberbergriff für class und interface Allgemeine Java-Themen 20
D QuickSort, Interface Allgemeine Java-Themen 2
R Interface für Arithmethik? Allgemeine Java-Themen 3
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
L Interface Frage! Allgemeine Java-Themen 25
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
F Ein interface und private Methoden? Allgemeine Java-Themen 13
G nichtabstrakte Funktion zu einer Interface hinzufügen Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben