Der Compiler sieht, dass wir versuchen von außerhalb des Objekts auf private Daten zuzugreifen. Er lässt und wissen, was er darüber denkt:
compiling: BankkontoTester.java BankkontoTester.java:46: Variable kontostand in class Bankkonto not accessible from class BankkontoTester. System.out.println( bobsKonto.kontostand ); ^ BankkontoTester.java:47: Variable kontostand in class Bankkonto not accessible from class BankkontoTester. bobsKonto.kontostand = bobsKonto.kontostand + 200; ^ BankkontoTester.java:47: Variable kontostand in class Bankkonto not accessible from class BankkontoTester. bobsKonto.kontostand = bobsKonto.kontostand + 200; ^ BankkontoTester.java:48: Variable kontostand in class Bankkonto not accessible from class BankkontoTester. System.out.println( bobsKonto.kontostand ); ^ 4 errors
Es mag etwas unsinnig erscheinen, dass die
Bankkonto
-Klasse private
verwendet, um die main()
Methode davon abzuhalten ihre Variablen zu sehen und dann einige Methoden zur Verfügung stellt, so dass main()
sie dann doch bekommt. Aber die Idee dabei ist, dass die Zugriffsmethoden jeden Zugang zu den privaten Daten überprüfen können. Zum Beispiel kann ein Programmierer den Kontostand eines Bankkontos nicht erhöhen,
indem er schreibt:
bobsKonto.kontostand = bobsKonto.kontostand + 200;
Um den Kontostand zu erhöhen, muss die verarbeiteEinzahlung()
Methode verwendet werden, in der in einem besser ausgearbeiteten Programm überprüft werden könnte, ob das Konto nicht gesperrt ist, ein Kennwort übergeben werden muss, bevor sie irgend etwas ändert und jede Änderung in eine Log-Datei schreiben könnte.
Dadurch, dass die Daten als private
deklariert werden und die Verwendung von Zugriffsmethoden erzwungen wird, ist es leichter Objekte konsistent und bugfrei zu halten.
Das ist in etwa wie das Hineinstecken der gesamten TV-Elektronik
in eine Box, wobei es dem Benutzer nur erlaubt ist Dinge
über Kontrolltasten von außerhalb der Box zu ändern.
TV-Geräte würden nicht lange halten, wenn Benutzer
gewohnheitsmäßig Kanäle ändern, indem sie die
Elektronik des Geräts mit einem Schraubenzieher bearbeiten.
(Gedächtnistest: ) Welchen Geldbetrag muss ein Kunde auf seinem Bankkonto haben, damit die Scheckgebühr entfällt?