Interfaces und allgemeingültige Methodenaufrufe

DennisXX

Bekanntes Mitglied
Hallo !

eine Sache vorweg (da mich hierfür bestimmt wieder einige Leute scharf kritisieren werden). Ich kann das folgende Codebeispiel nicht selbst austesten, da ich derzeit einen sehr alten und extrem langsamen rechner nutzen muss, auf dem keine aktuelle Java IDE mehr vernünftig läuft.

Ich habe hier drei Intefaces. Diese Interfaces besitzen jeweils eigene Methoden:

Java:
public interface A{
   String methode1();
   String methode2();
}


Java:
public interface B{
   String methode3();
   String methode4();
}


Java:
public interface C{
   String methode5();
   String methode6();
}


Nun gibt es eine Klasse, die diese drei Interfaces implementiert:

Java:
public class Testklasse implements interface A, interface B, interface C{

    //hier finden irgendwelche Implementierungen der Methoden statt

}

Nun existiert noch eine Ausgabeklasse (und eben genau hier würde ich gerne wissen wollen, ob die folgenden Implementierungen und Methodenaufrufe überhaupt funktionieren):

Java:
public class Ausgabe{

    interface A  refA = new Testklasse();
    refA.methode5();   //würde so etwas funktionieren?
    refA.methode3();   //geht das?
    refA.methode1();   //ok?

    interface B refB = new Testklasse();
    refB.methode3();  //funktioniert das?
    refB.methode6();  //ok?

}

Ich vermute, dass es nicht durchläuft, sicher bin ich mir dabei aber nicht.

Gruß
Dennis
 
Nein, das würde nicht funktionieren. Wenn du eine Variable eines bestimmten Typs (hier interface A) deklarierst, stehen Dir auch nur die Methoen von Interface A zur Verfügung.

Wenn Du auf alle Methoden Zugriff haben willst, könntest Du ein Interface ABC definieren, das A, B und C extended und dann Deine Klasse das Interface ABC implementieren lassen.
 
Hallo !

eine Sache vorweg (da mich hierfür bestimmt wieder einige Leute scharf kritisieren werden).
Ja. Ich kritisiere dich hiermit scharf!

Ich kann das folgende Codebeispiel nicht selbst austesten, da ich derzeit einen sehr alten und extrem langsamen rechner nutzen muss, auf dem keine aktuelle Java IDE mehr vernünftig läuft.

Läuft da noch ein Browser? Oder tippst du deine Beiträge auf dem Smartphone?

Ich frage, weil du nämlich so einfache Beispiele auch online ausprobieren kannst, etwa bei Ideone.com | Online IDE & Debugging Tool >> C/C++, Java, PHP, Python, Perl and 40+ compilers and intepreters
 
Hi landei !

Danke für deinen Beitrag !

Wenn Du auf alle Methoden Zugriff haben willst, könntest Du ein Interface ABC definieren, das A, B und C extended und dann Deine Klasse das Interface ABC implementieren lassen.

Also bedeutet das Interface A durch Interface B erweitert wird und das Interface C das Interface B erweitert und ganz unten in der Vererbungshierarchie steht dann das Inteface ABC, welches das Interface C erweitert? habe ich das so richtig verstanden?


Ja. Ich kritisiere dich hiermit scharf!

Warum denn? Ich sagte doch bereits, dass das auf meinem Rechner nicht zu testen ist.


Läuft da noch ein Browser? Oder tippst du deine Beiträge auf dem Smartphone?

Ich frage, weil du nämlich so einfache Beispiele auch online ausprobieren kannst, etwa bei Ideone.com | Online IDE & Debugging Tool >> C/C++, Java, PHP, Python, Perl and 40+ compilers and intepreters

Da läuft mit Hängen und Würgen der Firefox. Das Testen via Onlinemodus kannte ich noch nicht, danke dir für den Hinweis.

Gruß
Dennis
 
DennisXX hat gesagt.:
Also bedeutet das Interface A durch Interface B erweitert wird und das Interface C das Interface B erweitert und ganz unten in der Vererbungshierarchie steht dann das Inteface ABC, welches das Interface C erweitert? habe ich das so richtig verstanden?
Nein, das meinte ich nicht so. Ich meinte das hier:
Java:
public interface ABC extends A, B, C {
}

public class Testklasse implements ABC {
 
    //hier finden irgendwelche Implementierungen der Methoden statt
 
}

ABC abc = new Testklasse();
// kommt ursprünglich aus Interface A, und wird durch ABC weitergereicht
abc.methode1();
abc.methode2();
// kommt ursprünglich aus Interface B, und wird durch ABC weitergereicht
abc.methode3();
abc.methode4();
// kommt ursprünglich aus Interface C, und wird durch ABC weitergereicht
abc.methode5();
abc.methode6();
Das schöne an Interfaces ist nämlich, dass eine Klasse/ein anderes Interface mehrfach Interfaces implementieren/extenden kann.

[EDIT]
Java:
public class Testklasse implements interface A, interface B, interface C
interface A  refA = new Testklasse();
Dass diese beiden Zeilen nicht kompilieren, sollte man übrigens auch ohne IDE oder Testtool sehen. Ein Mindestmaß an Syntaxregeln für Java sollte man auswendig wissen 😀
[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben