Noch ein kleines Beispiel ( damit hab ich's auch verstanden ... 8) )
Stell dir vor, du schreibst eine Zeitklasse, die intern die Zeit in Minuten abbildet. Nun kommen andere daher und benutzen deine Klasse und greifen, weil du ja alles public gemacht hast auf deine Attribute zu. ... ist ja nicht weiter schlimm denkst du jetzt ... . Auch wenn du getter- und setter-Methoden drin hast, werden viele Entwickler trotzdem direkt auf deine public-Attribute zugreifen ( ... glaub mir ... sie tun es ... auch wenn du 1000x mal sagst: "Nehmt bitte die geter- und setter-Methoden"). Und nun hast du ein Problem, wenn du die interne Darstellung ändern willst, z.B. willst du jetzt die zeit nicht in Minuten sondern in Millisekunden abbilden. Auch wenn du mit deiner getter-Methode immernoch Minuten zurückgibst haben alle, die deine Attribute direkt benutzen ein Problem. Stell dir vor, da schreibt einer 'ne Musik-Verwaltung mit deiner Klasse und auf einmal dauert ein Lied der "Wildecker Herzbuben" nicht mehr 3 Minuten sondern 180000 Minuten ( da wird man ja blöd im Kopf ... :lol: ). Jeder der deine Attribute benutzt hat, muss sein Programm umschreiben !!! Und deshalb: machst du die Attribute private und definierst mit deinen getter- und setter-Methoden eine feste Schnittstelle nach aussen. Wenn du jetzt deine Zeitklasse umbauen willst / musst, brauchst du nur die getter- und setter-Methoden anpassen ... und kein anderer bekommt mit, dass du was verändert hast.
Natürlich ist private auch noch für andere Sachen gut ... aber das ist eine andere Geschichte und soll an einer anderen Stelle erzählt werden.
Alles klar ??
Viel Spass mit Java