Hi!
Ich schreibe in 2-3 Wochen eine ProgrammierKlausur und wollte hier einige Unklarheiten beseitgen:
Equals
Prinzipiell habe ich es so verstanden: Sobald, man etwas vergleichen will, wie zum Beispiel eine Menge von Elementen in einem Hashset: Dann muss man von der eigenst erstellten Klasse die Methode boolean equals(); von Object überschreiben, damit Hashset weiß, wann 2 Elemente gleich sind(nicht die selben, sondern gleich).
Wann muss man sonst noch Equals überschreiben??? Auch bei Hashmap oder Arraylisten? Oder prinzipiell nur, falls man etwas auf Gleichheit prüfen möchte??
Hashcode
Hashcode habe ich so verstanden, dass dies eine Art "Identifikationsnr" von einer Instanz sein kann. Jedoch muss gelten, dass sobald 2 Objekte equals gleich sind, auch den gleichen Hashcode haben müssen. 2 Instanzen welche den gleicehn Hashcode haben, müssen aber nicht unbedingt gleich sind...
Jedoch verstehe ich nicht, wofür man generell einen Hashcode brauch??? Ich meine mithilfe von Equals stellt man die Gleichheit schon fest?! Wozu brauche ich den Hashcode noch? Oder ist dies so eine Art "Positionierungsnummer" für ein HASHset, HASHmap etc?
Comparable & Comparator
Falls man das Interface Comparable implementiert, dann kann man auf "natürlicher Ordnung" mithilfe von überschriebener compareTo Methode in natürlicher Ordnung sortieren. Also sprich A vor B und 1 vor 2.. etc. Mithilfe eines erstellten Comparator Interfaces kann man hingegen(mit überschriebener compare Methode) eine eigne Reihenfolge(n) der Sortierung bestimmen. Lassen sich dadurch NUR Listen durch Collections.sort() sortieren? Oder auch Maps und Sets?
Sichtbarkeit
Private und public ist klar. Protected: Nur sichtbar innerhalb von Paketen richtig? Wieso benutzt man dann nicht einfach public? Also warum reicht public und private nicht schon aus?
Abstrakte Klassen und Interfaces
Abstrakte Klassen dienen einer (wie der Name schon sagt) Abstrahierung von Klassen und zwingen dazu, (bei Vererbung) alle abstrakten Klassen zu überschreiben, oder selbst als abstract zu deklarieren. Sowie werden alle Variablen oder Konstanten übernommen. Methoden können auch einen Rumpf besitzen. Interfaces hingegen implementiert man, und dort gibt es keine Methodenrümpfe und nur Konstanten. Warum reicht nicht eines davon? Beispielsweise nur Abstrakte Klassen?
Ist dies auch korrekt verstanden? Eine Klasse a hat, wenn sie eine abstrakte oberklasse hat, genau eine. aber diese klasse a kann beliebig viele interfaces implementieren?
Exceptions
Prinzipieller Ablauf klar... Jedoch, woher weiß ich, wenn ich die API gerade nicht benutzen kann, welche Exceptions eine Klasse haben könnte (welche weitergereicht oder gecatched werden müssten)? Nur durch vieles Programmieren oder gibs da eine Möglichkeit das "herauszufinden"
Streams
Auch hier verstehe ich leider nicht, warum es soviele verschiedene Klassen gibt. Warum hätte es nicht ausgereicht, eine Klasse InputStream zu haben und eine Outputstream (und die wichtigen Methoden in diesen Klassen). Diese beiden sind ja meines Wissens nach abstrakt, und werden benutzt von InputStreamReader beispielsweise welches Byteweise zeichenweise darstellt, oder?
Dynamische Bindung
Wäre nett, wenn mir hierzu einer etwas erläutern könnte? (ja, ich habe schon in 1-2 Bücher geschaut...)
Danke vielmals.... Ich habe alle Themen schonmal nachprogrammiert und schon dadurch vielmehr Verständnis hinzubekommen, jedoch würde ich gerne sehr gut vorbereitet in die Klausur gehen und nicht einfach nur das mit Equals und Hashcode beispielsweise ausführen, sondern auch Lernen, warum und wofür Hashcode beispielsweise genau da ist.
Danke euch!!!
Ich schreibe in 2-3 Wochen eine ProgrammierKlausur und wollte hier einige Unklarheiten beseitgen:
Equals
Prinzipiell habe ich es so verstanden: Sobald, man etwas vergleichen will, wie zum Beispiel eine Menge von Elementen in einem Hashset: Dann muss man von der eigenst erstellten Klasse die Methode boolean equals(); von Object überschreiben, damit Hashset weiß, wann 2 Elemente gleich sind(nicht die selben, sondern gleich).
Wann muss man sonst noch Equals überschreiben??? Auch bei Hashmap oder Arraylisten? Oder prinzipiell nur, falls man etwas auf Gleichheit prüfen möchte??
Hashcode
Hashcode habe ich so verstanden, dass dies eine Art "Identifikationsnr" von einer Instanz sein kann. Jedoch muss gelten, dass sobald 2 Objekte equals gleich sind, auch den gleichen Hashcode haben müssen. 2 Instanzen welche den gleicehn Hashcode haben, müssen aber nicht unbedingt gleich sind...
Jedoch verstehe ich nicht, wofür man generell einen Hashcode brauch??? Ich meine mithilfe von Equals stellt man die Gleichheit schon fest?! Wozu brauche ich den Hashcode noch? Oder ist dies so eine Art "Positionierungsnummer" für ein HASHset, HASHmap etc?
Comparable & Comparator
Falls man das Interface Comparable implementiert, dann kann man auf "natürlicher Ordnung" mithilfe von überschriebener compareTo Methode in natürlicher Ordnung sortieren. Also sprich A vor B und 1 vor 2.. etc. Mithilfe eines erstellten Comparator Interfaces kann man hingegen(mit überschriebener compare Methode) eine eigne Reihenfolge(n) der Sortierung bestimmen. Lassen sich dadurch NUR Listen durch Collections.sort() sortieren? Oder auch Maps und Sets?
Sichtbarkeit
Private und public ist klar. Protected: Nur sichtbar innerhalb von Paketen richtig? Wieso benutzt man dann nicht einfach public? Also warum reicht public und private nicht schon aus?
Abstrakte Klassen und Interfaces
Abstrakte Klassen dienen einer (wie der Name schon sagt) Abstrahierung von Klassen und zwingen dazu, (bei Vererbung) alle abstrakten Klassen zu überschreiben, oder selbst als abstract zu deklarieren. Sowie werden alle Variablen oder Konstanten übernommen. Methoden können auch einen Rumpf besitzen. Interfaces hingegen implementiert man, und dort gibt es keine Methodenrümpfe und nur Konstanten. Warum reicht nicht eines davon? Beispielsweise nur Abstrakte Klassen?
Ist dies auch korrekt verstanden? Eine Klasse a hat, wenn sie eine abstrakte oberklasse hat, genau eine. aber diese klasse a kann beliebig viele interfaces implementieren?
Exceptions
Prinzipieller Ablauf klar... Jedoch, woher weiß ich, wenn ich die API gerade nicht benutzen kann, welche Exceptions eine Klasse haben könnte (welche weitergereicht oder gecatched werden müssten)? Nur durch vieles Programmieren oder gibs da eine Möglichkeit das "herauszufinden"
Streams
Auch hier verstehe ich leider nicht, warum es soviele verschiedene Klassen gibt. Warum hätte es nicht ausgereicht, eine Klasse InputStream zu haben und eine Outputstream (und die wichtigen Methoden in diesen Klassen). Diese beiden sind ja meines Wissens nach abstrakt, und werden benutzt von InputStreamReader beispielsweise welches Byteweise zeichenweise darstellt, oder?
Dynamische Bindung
Wäre nett, wenn mir hierzu einer etwas erläutern könnte? (ja, ich habe schon in 1-2 Bücher geschaut...)
Danke vielmals.... Ich habe alle Themen schonmal nachprogrammiert und schon dadurch vielmehr Verständnis hinzubekommen, jedoch würde ich gerne sehr gut vorbereitet in die Klausur gehen und nicht einfach nur das mit Equals und Hashcode beispielsweise ausführen, sondern auch Lernen, warum und wofür Hashcode beispielsweise genau da ist.
Danke euch!!!
Zuletzt bearbeitet: