Über ein Interface methoden ansprechen

D

derMiche

Gast
Hallo,

also ich verzweifel hier schon beihnahe - suche schon seit ca 1 1/2h bei google und find einfach nicht das was ich suche,
hier mal kurz was ich "theoretisch" suche:

Java:
public interface MyInterface
{
     ....
     public void sayHello ();
     ....
}

Java:
public class Hello1 implements MyInterface
{
     ....
     public void sayHello ()
     {
          System.out.println ("Hi, hier Hello1");
     }
     ....
}


Java:
public class Hello2 implements MyInterface
{
     ....
     public void sayHello ()
     {
          System.out.println ("Hi, hier Hello2");
     }
     ....
}

Java:
public class TestMyInterface
{
     public static void main (String args[])
     {
          ...
          MyInterface.sayHello(); // Hier soll jetzt jede klasse reagieren die MyInterface inplementiert hat
          ...
     }
}

am ende möchte ich halt eine zahl in den "raum werfen", ohne zu wissen was da alles an klassen da sind, und irgendeine
klasse wird sich angesprochen fühlen.

Ziel:
erweiterbares programm durch einfaches implementieren, ohne jede klasse einzeln eintragen zu müssen.

ansonsten müsste man ja so arbeiten:
Java:
public class TestMyInterface
{
     public static void main (String args[])
     {
          ...
          Hello1 h1 = new Hello1 ();
          Hello2 h2 = new Hello2 ();
          ...
          h1.sayHello();          // genau dieses "kleingefutzel" würde ich mir gerne sparen
          h2.sayHello();
          ...
     }
}
 

KrokoDiehl

Top Contributor
Ich bin mir nicht sicher, ob ich dich richtig verstanden habe, aber was du willst, klingt bisher nach dem Factory-Muster (unter dem Begriff lässt sich sicher einiges ergooglen). Kurzum heißt das, dass du einer Factory deine Zahl in den Rachen wirfst und irgendeine Instanz von MyInterface raus bekommst. Welche, darum kümmert sich nur die Factory selbst, nicht der Aufrufer.
Minimalst könnte das etwa so aussehen:

Java:
public class HelloFactory
{
    public static MyInterface newHelloInstance( int number )
    {
        switch (number)
        {
            case 1: return new Hello1();
            case 2: return new Hello2();
            ...
            default: return null; // bzw. Fehlerbehandlung, sonstwas
    }    
}

// Benutzung:

MyInterface hello = HelloFactory.newHelloInstance( no );
hello.sayHello();
 

U2nt

Bekanntes Mitglied
Könntest das ganze "kleingestückelte" in eine Liste packen und dann mit einer for-each Schleife "ausgeben" lassen.
Java:
List<MyInterface> myList = new ArrayList<MyInterface>();
myList.add(h1);
myList.add(h2);

for(MyInterface mi : myList) {
  mi.sayHello();
}
 
D

derMiche

Gast
naja,
dann müsst ich ja trotzdem an meiner klasse was ändern, bzw jede weiter klasse eintragen...
ich kann mir des grad au nemme ganz vorstellen wie das gehen soll, zuviel wirres zeug gelesen XD

ich möchte sozusagen den "kern" des Programms nicht anrühren aber jederzeit klassen hinzufügen können, mit denen es aber trotzdem arbeiten kann, ohne sie zu kennen.
ob des über schnittstellen machbar ist bzw sinn mach weis ich net,
 

Antoras

Top Contributor
Wenn du den Quelltext nicht ändern möchtest, dann bleibt dir nur die Möglichkeit die Klassen dynamisch zu laden. D.h. du definierst z.B. eine Datei in der die Namen der Klassen drinstehen und diese werden dann über Reflection geladen. Wenn du gar nichts ändern willst, also auch keine externe Datei, dann kannst du deinem Programm auch sagen, dass es ein Verzeichnis durchsuchen soll und alle darin liegenden Klassen mit einem Eintrittspunkt laden soll.
Java:
interface I {
  void entryPoint();
}
class X implements I {
  @Override void entryPoint() {/*mach was*/}
}
Der Eintrittspunkt ist pracktsich nur eine Kennzeichnung, an der dein Programm erkennt, dass die Klasse geladen werden soll. Das kann anstatt einer Methode z.B. auch eine Annotation sein oder schlichtweg nur ein bestimmter Zusatz beim Namen (wie MyClassMyInterfaceImpl -> MyInterfaceImpl).
Du musst dir dann halt nur noch überlegen wie du auf die geladenen Klassen zugreifen kannst. Das würde z.B. über eine Map gehen:
Java:
Map<String, I> classes;
// im Classloader
classes.put(className, classReference)
Wobei der Key der Map etwas ist mit dem du die Klasse identifizieren und verwenden kannst.
 

timbeau

Gesperrter Benutzer
Du kannst nicht über ein Interface einen Berg von Klassen ansprechen. Das ist sicherlich auch nicht gewollt.

Was du aber machen kannst ist z.B. in deinem Hauptprogramm eine Methode die einen Parameter vom Typ Interface erwartet konstruieren. Dieser kannst du dann alle Klassen übergeben die dieses Interface implementieren.

Java:
/**
* fun = Interface
* ifaceTest(Zwei) implementiert fun
**/

public static void main(String[] args) {
ifaceTests i = new ifaceTests();		
ifaceTestsZwei izwei = new ifaceTestsZwei();
		pri(i);
pri(izwei);
	}
	
	private static void pri(fun fun){
		fun.sayHello();
	}
 
D

derMiche

Gast
danke das ihr mir so schnell geholfen habt! :)
ich werde mir darüber jetzt erstmal den kopf zerbrechen - welcher weg am besten für mein problem ist...
 

freez

Top Contributor
Also irgendwie kommen mir eure Antworten zu kompliziert vor. Oder ich habe die Frage noch nicht richtig verstanden. Als Lösung würde ich folgendes vorschlagen:
Klasse TestMyInterface.main(...):
Java:
public static void main (String args[])
     {
          ...
          MyInterface iHello = new Hello1();
          iHello.sayHello(); // Ausgabe von Hello1
          iHello = new Hello2();
          iHello.sayHello(); // Ausgabe von Hello2
          ...
     }

Ist es das, was du suchtest, oder habe ich was falsch verstanden?
 

Antoras

Top Contributor
Das wurde bereits in den ersten Antworten vorgeschlagen. Der TO will diese Lösung aber nicht, da er dabei wissen muss wie viele Implementierungen vorhanden sind und wie diese konkret heißen. Außerdem muss er dabei bei jeder Änderung immer wieder die Sourcen anpassen.
Der TO hat aber auch nicht genauer spezifiziert was er genau erreichen möchte - eine hilfreichere Antwort als die bereits vorhandenen kann man so nur schwer geben.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
O Über Map laufen Erklärung Java Basics - Anfänger-Themen 4
U Best Practice Buttons sollen ÜBER Labeln liegen, also quasi im Vordergrund. WIE? Java Basics - Anfänger-Themen 4
AssELAss Über ein Objekt vom Typ BigDecimal iterieren Java Basics - Anfänger-Themen 6
L Über 100e Werte anzeigen Java GUI Java Basics - Anfänger-Themen 1
0 Über CMD die JAVA Datei ausführen? möglich? Java Basics - Anfänger-Themen 8
A Über Jahr iterieren, Freitag der 13. Java Basics - Anfänger-Themen 2
S Über Button Zeichnung ändern Java Basics - Anfänger-Themen 5
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
J Über ... Dialog (Mac OS) Java Basics - Anfänger-Themen 8
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
PINTOR Über IP verschicken Java Basics - Anfänger-Themen 3
C Über Boolean Static, String ausgeben Java Basics - Anfänger-Themen 3
S Über Bild zeichnen Java Basics - Anfänger-Themen 21
H Mac Menu-Über Programm anpassen Java Basics - Anfänger-Themen 3
K Datentypen Über Collection iterieren bringt fehler Java Basics - Anfänger-Themen 8
P Über HashMap iterieren -> NullPointerException Java Basics - Anfänger-Themen 2
J Array List - Über die Konsole eingeben Java Basics - Anfänger-Themen 1
A Struts: Über Collection iterieren mir Taglibs? Java Basics - Anfänger-Themen 13
G Über Button DB Tabelleninhalt löschen Java Basics - Anfänger-Themen 24
M Über einen Button etwas zeichnen lassen Java Basics - Anfänger-Themen 5
G Über undo, copy, cat, paste, delete Funktionen Java Basics - Anfänger-Themen 3
D Über Button abhängig von Auswahl 2 versch. Fenster öffnen Java Basics - Anfänger-Themen 2
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

Ähnliche Java Themen

Neue Themen


Oben