packages, jars - Verstaendnisfrage

Status
Nicht offen für weitere Antworten.

Corcovado

Bekanntes Mitglied
Hallo,
kann mir mal jemand erklaeren wozu es in Java Packages, jars usw gibt? Warum so viele unterschiedliche Niveaus der Verkapselung? Wann packe ich Klassen in ein Package und v.a. warum? Was sind jars eigentlich genau und wozu sind die gut???


Mir ist klar, dass es was ziemlich grundlegendes ist. Aber als Java-Anfaenger habe ich vielleicht noch etwas Narrenfreiheit und kann mir zwar das "Oh Gott, lass Hirn... !" beim lesen dieser Frage vorstellen, hoffe aber trotzdem noch auf erklaeraende Antworten. Danke !
 
Hallo,

also packages sollen inhaltlich zusammenhängende Klassen zusammenfassen. Z.B. kann man alle Klassen, die für die Oberfläche zuständig sind in ein Package, die Datenstruktur in ein anderes und die Logik in ein drittes Package, oder so ähnlich. Sie sind also dafür da um Ordnung in seine Klassen zu bekommen.

Nun zu den jars. Diese sind hauptsächlich dafür da um Programme zusammenzuhalten, wenn sie fertig entwickelt sind. Ist das Programm fertig geschrieben, packt man alle Klassen in ein jar und kann dieses dann ausleifern. Besteht das ganze aus mehreren Unterprogrammen, kann man diese auch in mehrere jars packen un das ganze zusammen ausführen.
 
Danke hm - so is das also ???:L

Danke - und wozu gibts eigentlich Interfaces UND abstrakte Klassen? Wozu und wann benutze ich Interfaces und wann schreibe ich eine Abstrakte Klasse.Irgendwie sieht das fuer mich wie ein und dasselbe auf verschiedene Weise formuliert aus?
Ich kann beides nicht instanziieren und kann mit beidem "Konventionen" oder besser Vorgaben geben, die implementiert werden muessen ODER koennen ?! Was aber auch der einzigste Unterschied ist fuer mich ??
 
Ein Interface ist eine abstrakte Klasse. Mit dieser kann man mehrfach - Vererbung realisieren.
Da eine Klasse von beliebig vielen Interfaces erben kann. Allerdings muss diese Klasse alle Methoden,
die im Interface deklariert sind dann überschreiben. Denn im Interface sind alle Methoden ja ohne Rumpf,
also ohne Inhalt.

Für dich selber Interfaces zu erstellen, bringt dir zu Beginn deiner Programmierlaufbahn nichts, Sie dienen
nur zur Strukturierung.

- Wenn du z.B. ein Interface "Fortbewegungsmittel" erstellst, in diesem erstellts du
die Methode "bewegen". Nun erstellst du eine Klasse Auto und eine Flugzeug. Beide implementieren
das Interface Fortbewegungsmittel und müssen die Methode "bewegen" überschreiben. Das Auto fährt
Flugzeug fliegt. Das Interface bringt dir also nur, dass man sieht, dass die Klassen Auto und Flugzeug
etwas gemeinsam haben.

-Ein anderes Beispiel für die Verwendung wäre dann die Mehrfachvererbung.

Also ich als Programmierer brauche eigene Interfaces nicht, ich benutze nur die, die von Sun
schon bereitgestellt werden, und die sind sehr wichtig: z.B. alle Listener-Intefaces um Maus-oder
Tastatur-Ereignisse abzufangen.

Alles gut?
 
tja noch nich ganz. Also erstmal die Auskunft ist sehr aufschlussreich und kommt bei der Erklaerung des Prinzips fuer mich ziemlich auf den Punkt. Aber genau da habe ich meine Fragen:

- Mehrfachvererbung gibts in Java nicht, ich denke das liegt wohl hauptsaechlich, am Umgehen tueckischer Namenskonflikte (Bsp C++) und bringt strukturelle Einfachheit und somit bessere Uberschaubarkeit, Planbarkeit und erhoeht somit die Effizienz (wie mir bei Java sehr oft auffaellt, das stilistische Regeln in C++, nun in Java zu festen Sprachregeln geworden sind). Wozu dann aber wieder der Umweg ueber Interfaces? Warum nicht die Mehrfachvererbung etwas einschraenken? Warum diese Sonderklasse der Inferfaces und warum der Zwang (= sprich wozu dieser Unterschied zu abst. Klassen) Methoden (auch wenn ich sie nicht brauche) implementieren zu muessen - ist fuer mich nicht wirklich logisch?

- Das Bsp mit dem Fortbewegungsmittel kann ich doch genauso als abst. Klasse implementieren? Was bringt mir da 'n Interface? Ich sehe ja ein, dass man es so machen kann (und in Java wohl auch so macht) aber fuer mich is das dasselbe wie ne abst. Klasse in gruen. (Wobei ich jedoch bei den abst. Klassen irgendwie mehr Vorteile sehe.)

- Naja die Listener-Sachen, das is wohl ein Grund. Wenn SUN in seinen Containern, die Dinge eben nur als Interface zur Verfuegung stellt, gehts nich anders... :roll:

Ich finde ja im allg. Java schon sehr komfortabe, zwar eine unueberschaubare Menge an Funktionen fuer den Anfang aber man kommt sehr schnell rein und v.a. die Kompatibilitaet ist spitze.
 
Du sagst man solle doch die Mehrfachvererbung ein wenig einschränken,
genau dass hat man ja durch die Interface-Lösung gemacht.

Der Unterschied ist z.B. Klasse A und B sind beide abstrakte Klassen,
dann kannst du nicht sagen

Class c extends A,B

und auch nicht

Class c implements A,B

um das zu machen müssten A und B interfaces sein.
Der Quellcode der beiden Klassen wäre identisch, nur das einmal ganz oben
public interface

und einmal

public abstract class

steht.
Wie gesagt ein Interface musst du bei mehrfachvererbung nehmen.
Eine Abstrakte Klasse würdest du in dem vorigen Beispiel nehmen,
die Klasse "Fortbewegungsmittel".
Warum keine normale Klasse: weil ich nicht will, das man von der Klasse
"Fortbewegungsmittel" Objekte erstellen kann, weil es auch unlogisch ist,
deshalb mache ich Sie als abstrakt.

Also wenn du nur verhindern willst, dann von einer Klasse Objekte erstellt dann mache
Sie abstrakt, wenn du mehrfachvererbung willst nimm ein interface.

Vom Quellcode sieht beides gleich aus.
Ich denke länger sollte uns dieses Problem nun auch nicht mehr aufhalten.
Hoffe es war :idea: und nicht :bahnhof:
 
Corcovado hat gesagt.:
Warum diese Sonderklasse der Inferfaces und warum der Zwang (= sprich wozu dieser Unterschied zu abst. Klassen) Methoden (auch wenn ich sie nicht brauche) implementieren zu muessen - ist fuer mich nicht wirklich logisch?

vorsicht!
alle interface-methoden müssen implementiert werden, das ist richtig!
aber auch alle abstrakten methoden einer abstrakten klasse! wenn du die nicht beim vererben überschreibst, wirst du probleme bekommen

interfaces sind eigentlich eine sehr gute lösung für die mehrfachvererbungsproblematik! wie schon erwähnt wurde - in c++ gabs große namensprobleme, grad bei einer karovererbung (b und c erben von a, d erbt von b und c) ... in java-interfaces stehen nur nicht-implementierte methoden und konstanten -> kein speicherwirrwarr

wenn du die generelle frage "wozu interfaces" stellst, dann muss die antwort sein: weil sie das objektorientierte prinzip stützen! 😉
 
@das Gesicht, ich meint ja die Fortbewegungsklasse einfach nur als "abstrakte Klasse" und halt eben nicht als Interface,aber ich glaube wir meinen dasselbe.

OK, ich denke die Fragen dazu sind (erstmal) geklaert. 😉
Dank !
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben