zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Die zwei Instanzvariablen können private gemacht werden.

MeinPunkt mit besserer Kapselung

Hier ist eine überarbeitete Version des Programms. Jetzt sind MeinPunkt-Objekte unveränderbar, da selbst mit einer Referenz die Methoden das Objekt nicht ändern können.

class UnveraenderbarerPunkt
{
  private int x, y;

  public UnveraenderbarerPunkt( int px, int py )
  {
    x = px;    y = py;
  }

  public void ausgeben()
  {
    System.out.println("x = " + x +
        "; y = " + y );
  }

}

class PunktPrinter
{
  public void print( UnveraenderbarerPunkt p )
  {
    p.ausgeben();

    p.x = 77 ; // FALSCH! das können Sie nicht tun
  }
}

class PunktTester
{
  public static void main ( String[] args )
  {
    UnveraenderbarerPunkt pt =
        new UnveraenderbarerPunkt( 4, 8 );
    pt.ausgeben();

    pt.x = 88 ;  // FALSCH! das können Sie nicht tun

    PunktPrinter pprinter = new PunktPrinter();
    pprinter.print( pt );

  }
}

Da UnveraenderbarerPunkt-Objekte unveränderbar sind, wird ein Konstruktor benötigt, um die Instanzvariablen mit ihren permanenten Werten zu initialisieren.

FRAGE 13:

(Denkfrage:) Wäre es möglich eine PunktDoppler Klasse für UnveraenderbarerPunkt-Objekte zu schreiben?