Koordinatengrafik mit Java
HomeAufgabenDruckenJava-Online

Parameterübergabe, Referenz this

Bei Programmen, die aus mehreren Klassen bestehen, werden oft Methoden- oder Konstuktor-Parameter verwendet, um die Instanzvariablen zu initialisieren. Im folgenden Beispiel müssen z.B. in der Klasse Ball die Kurstuktor-Parameter GPanel, size und color in den Instanzvariablen gespeichert werden, damit sie in der ganzen Klasse, auch in der Methode show sichtbar sind.

Die gleiche Bezeichnung der Parameter und der Instanzvariablen führt zu einem Namenskonflikt (siehe Tabelle links)

class Ball
{
  private double size;
  private Color fillColor;

  Ball(double size, Color fillColor)
  {
    size = size;
    fillColor = fillColor;
  }
}
class Ball
{
  private double size;
  private Color fillColor;

  Ball(double s, Color c)
  {
    size = s;
    fillColor = c;
  }
}
class Ball
{
  private double size;
  private Color fillColor;

  Ball(double size, Color fillColor)
  {
    this.size = size;
    this.fillColor = fillColor;
  }
}
falsch
richtig
richtig

Es gibt zwei Möglichkeiten, das Problem umzugehen:
1) Man bezeichnet die Parameter anders als die zugehörige Instanzvariablen (Tabelle Mitte)
2) Man verwendet die this-Referenz (Tabelle rechts). Unter this versteht man eine Referenz auf die aktuelle Instanz.Man kann dadurch die Instanzvariablen immer mit this ansprechen.

 Beispiel 5: Die Klassen Tennisball und Fussball werden von der Klasse Ball abgeleitet.

// VererbungEx5.java

import ch.aplu.util.*;
import java.awt.Color;

public class VererbungEx5 
{
  public VererbungEx5()
  {
    GPanel p = new GPanel(010010);  
    Tennisball tb = new Tennisball(p);
    Fussball fb = new Fussball(p);
    tb.show(35);
    fb.show(65);
  }
  
 public static void main(String[] args)
  {
    new VererbungEx5();
  } 
}

// Ball.java--------------------------------

class Ball 
{ 
  private GPanel p;
  private double size;
  private Color fillColor;
  
  Ball(GPanel p, double size, Color fillColor)
  {
    this.p = p;
    this.size = size;
    this.fillColor = fillColor;
  }
  
  public void show(double x, double y)
  {
    p.move (x, y);
    p.color(Color.gray);
    p.fillCircle(size);
    p.color(fillColor);
    p.fillCircle(size - 0.04);
  }
}

// Tennisball.java ------------------------------------------

class Tennisball extends Ball
{

  Tennisball(GPanel p)
  {
    super(p, 0.3Color.yellow);
  } 
}

// Fussball.java ------------------------------------------

class Fussball extends Ball
{
  GPanel p;

  Fussball(GPanel p)
  {
    super(p, 1Color.lightGray);
    this.p = p;
  } 
  
  public void show(double x, double y)
  {
    super.show(x, y);
    p.color(Color.red);
    p.text(- 0.5, y, "EM 2008");
  }
}

 

 

 

 

Erklärungen zum Programmcode: