Guten Morgen zusammen,
ich weiß das Internet ist voll von Erklärungen aber irgendwie versteh ich es trotzdem nicht wirklich.
Also ich habe ein ziemlich großes Java Programm geschrieben was auch funktioniert aber ich glaube es ist nicht wirklich sauber programmiert. Daher würde ich dieses gerne jetzt umbauen. Dabei bin ich wiedermal über den Begriff Interfaces gestoßen.
Meine Frage ist jetzt, wenn ich eine Variable in einer Interface Klasse deklariere und diese in einer Klasse Klasse_1 verwenden möchte, wie kann ich den Wert der Varaible aus dem Interface nachträglich noch verändern oder geht das überhaupt nicht?
Mir ist nämlich aufgefallen, dass wenn ich der Interfacevariable einen Wert zuweisen möchte, dann kommt immer eine Fehlermeldung "The final Field InterfaceName.Variablenname cannot be assigned"
Ich steh da ein bisschen auf dem Schlauch.
Ich habe auch noch Beispiele gefunden, bei denen eine get und eine set Methode mit im Interface deklariert wurde nur verstehe ich nicht wie dann der Bezug zu meiner Interfacevariable hergestellt wird.
Bin kein Anfänger aber auch kein Profi aber da steh ich grad voll auf dem Schlauch.
Wäre schön wenn mir jemand das mal in einem einfachen deutsch und eventuell anhand eines kleinen Beispiels erklären könnte.
Prinzipiell empfehle ich dir, dich mit dem Schlüsselwort "final" auseinander zu setzen.
Ein Interface (dt "Schnittstelle"), sagt einer Klasse was zu funktionieren hat (gibt Methoden vor). Dem Interface ist es dabei egal, wie die Klasse das macht. Somit kannst du per Interface auch nicht vorschreiben, dass die Implementation eine bestimmte Variable nutzen soll. Was du dann vielleicht suchst ist eine abstrakte Klasse.
Im Interface definierte "Variablen" sind eigentlich Konstanten. Der Compiler behandelt sie so, als würde "static final" davor stehen. Darum bekommst du auch einen Fehler, wenn du versucht dieser "Variablen" einen Wert zuzuweisen.
Zeig doch mal her deine Klasse und das Interface, dass du bereits entworfen hast. Vielleicht kann man da konkreter helfen, als so ganz ohne Code.
Ich hoffe damit kannst du was anfangen. Ich hab das jetzt mal so gelassen wie ichs grad bearbeitet habe. Heißt dass da auch noch oben die 2 Fehler drinne sind bei denen ich den Interfacevariablen was zuweisen wollte.
Warum alles static? Nimm das raus! Gerade in der Klasse "StartupCheck".
Warum ist StartupCheck ein JFrame (
Code:
extends JFrame
)? Das solltest du rausnehmen, da du den eigentlichen Frame doch in Zeile 25 erzeugst (
Code:
final JFrame startCheck = new JFrame();
).
Entscheide dich für eine Notation. Entweder camelCase oder snake_case. In Java üblich ist camelCase.
Ich sehe nicht, wo du
Code:
screenWidth
und
Code:
screenHeight
definierst.
Du scheinst mir das Interface als Abstrakte Klasse benutzen zu wollen. Bitte setzte dich mit dem Schlüsselwort "abstract" auseinander und wandle dann Variablen in eine abstrakte Klasse um, von der du StartupCheck erben lässt.
Das wars erstmal soweit, was ich in deinem Code sehe.
Warum möchtest du denn überhaupt dieses Interface (und auch
Code:
ScreenDeklaration
) bauen? Sind die Variablen und Methoden nicht viel besser direkt in "StartupCheck" aufgehoben?
Ich hatte das mit dem Interface erst nicht, bin aber gestern auf irgendein Problem gestoßen (hab leider vergessen was das war. Gestern ist natürlich auch schon wieder sehr lange her ) Auf jedenfall hab ich dann heute morgen angefangen mich damit auseinander zu setzen.
Ich stoße immer wieder auf das Problem, dass ich mit den Begrifflichkeiten nicht zurechtkomme bzw weiß ich nicht wann ich was benutzen sollte.
Wann machen Interfaces Sinn und wann nehme ich static und wann sollte ich besser die Finger davon lassen und was genau macht static? ich hab zwar ein Buch und habe eigentlich gedacht, dass ich es verstanden habe, wurde aber ja jetzt wieder eines Besseren belehrt.