Ja, völlig planlos, weil die meine Fragen sind. Die Grundlagen, die ich nicht ganz verstanden habe.
[...]
Ja, das habe ich schon. wie ich oben geschrieben habe, die sind meine Fragen.
Okay, lass es mich anders formulieren:
Wenn all diese Fragen in zwei Tagen aufkommen, hat der Grundlagenkurs absolut keinen roten Faden und taugt nichts, und du solltest dir einen anderen suchen.
Ein Grundlagenkurs, der überhaupt schon solche Fragen aufkommen lässt, ist in meinen Augen ziemlich ungeeignet.
Wer sagt, das erste Mal von "Association, Composition, Aggregation" gehört habe?
Deine Frage, ob dir das jemand kurz erklären kann und wo es Sinn macht
Wie es aussieht, ihr Programmierer auf diesem Forum nicht mehr als ich Ahnung habt. Bis jetzt habe ich keine Befriedigende Antwort auf meine Fragen bekommen habe.
Auf "wo macht es Sinn" gibt es keine zufriedenstellende Antworten.
Falls du eine ausführliche Antwort zu dieser Frage hier möchtest:
Ein Beispiel für finale Methoden wären zb equals und hashCode. Wenn man Ableitungen einer Klasse zulassen möchte, aber gleichzeitig dafür sorgen will, dass das liskovsche Substitutionsprinzip erfüllt bleibt, ist es oft sinnvoll, diese beiden Methoden final zu machen. Eine Alternative dazu wäre eine "canEqual"-Methode, die macht das ganze aber natürlich wieder komplizierter, und ist oftmals auch nicht nötig.
Eine andere Häufige Anwendung sind nicht-private Methode, die im Konstruktor aufgerufen werden. Die Methoden überschreiben kann zu unerwarteten Fehlern führen (da sie eben vor der Initialisierung des Objekts aufgerufen werden), weshalb es sich oft anbietet, diese zu überschreiben.
Außerdem kann es bei Methoden sinnvoll sein, die Werte validieren. Wenn man die Methoden überschreibt, kann man die Validierung umgehen und die Klasse in einen inkonsistenten Zustand bringen – um das zu verhindern kann man die Methoden final machen (wobei man dann natürlich noch dafür sorgen muss, dass sie auch wirklich aufgerufen werden, man muss also meist noch mehr final machen.