MINT üben

Eine Klasse implementieren

Aus drei Feldern einer Klassenkarte wird echter Java-Code — und ein vergessenes this kann ein ganzes Regal leer lassen.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Dreißig Übungen zum Klicken, Ziehen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du hängst, helfen dir die gestuften Tipps.

A1
Eine Klasse lesen: Parkticket
AFB I

So ist das Ticket eines Parkhauses implementiert. Welche Aussagen stimmen?

public class Parkticket {
    private int einfahrtMinute;
    private boolean bezahlt;

    public Parkticket(int einfahrtMinute) {
        this.einfahrtMinute = einfahrtMinute;
        bezahlt = false;
    }

    public int dauer(int jetzt) {
        return jetzt - einfahrtMinute;
    }

    public void bezahlen() {
        bezahlt = true;
    }
}
Mehrere Antworten sind richtig. Markiere alle zutreffenden und klicke dann auf „Prüfen“.
Eine void-Methode darf keinen Wert zurückgeben — return true; wäre sogar ein Übersetzungsfehler. this ist nur nötig, wenn ein Parameter genauso heißt wie das Attribut; bei bezahlt = false; gibt es keinen gleichnamigen Parameter, also ist das Attribut gemeint. Und die Attribute gehören zum Objekt, sobald es mit new erzeugt wird.
Ansatz: Gehe die Klasse von oben nach unten durch: Attribute, Konstruktor, Methoden. Was unterscheidet den Konstruktorkopf von einem Methodenkopf?
Weiter: this braucht man nur, wenn Parameter und Attribut gleich heißen. void heißt: kein return mit Wert.
A2
Attribut oder Parameter?
AFB II

In der Klasse Wecker kommen die Namen stunde und minute mehrfach vor:

public class Wecker {
  private int stunde;
  private int minute;

  public Wecker(int stunde) {
    this.stunde = stunde;
    minute = 0;
  }

  public void stellen(int minute) {
    this.minute = minute;
  }

  public int getMinute() {
    return minute;
  }
}

Untersuche jedes Vorkommen: Meint der Name das Attribut oder einen Parameter?

Schiebe die oberste Karte auf den passenden Stapel: ziehen, einen der beiden Stapel-Knöpfe drücken oder auf der Karte ←/→. Eine abgelegte Karte holst du mit Klick oder Enter zurück. „Prüfen“ schickt falsch abgelegte Karten mit einem Hinweis zurück in den Stapel.
stunde in this.stunde = stunde; (links vom Gleichheitszeichen)
stunde in this.stunde = stunde; (rechts vom Gleichheitszeichen)
minute in minute = 0; (im Konstruktor)
int minute im Kopf von stellen
this.minute in this.minute = minute;
minute rechts in this.minute = minute;
minute in return minute; (in getMinute)
int stunde im Kopf des Konstruktors
Mit this. ist immer das Attribut gemeint. Ein Name allein bedeutet den Parameter, sobald die Methode einen gleichnamigen hat (stunde im Konstruktor, minute in stellen). Hat die Methode keinen solchen Parameter (minute = 0; im Konstruktor, return minute; in getMinute), ist das Attribut gemeint.
Schau für jede Karte in den Kopf der Methode: Gibt es dort einen Parameter mit genau diesem Namen?
this. bezeichnet immer das Attribut. Ohne this. gilt: Gibt es einen gleichnamigen Parameter, meint der Name den Parameter; sonst das Attribut.
A3
Der Briefkasten im Quelltext
AFB I

Die Klasse Briefkasten gehört zu einer Hausverwaltung:

public class Briefkasten {
  private int briefe;
  private boolean voll;

  public Briefkasten() {
    briefe = 0;
    voll = false;
  }

  public void einwerfen() {
    briefe = briefe + 1;
    if (briefe >= 5) {
      voll = true;
    }
  }

  public boolean istVoll() {
    return voll;
  }
}

Lies aus dem Quelltext ab, welche der folgenden Aussagen stimmen.

7 Aussagen nacheinander. Eine falsche Einschätzung reicht — dann startest du die Serie mit „Neue Runde“ neu.
Aussage 1 von 7

Die Klasse hat zwei private Attribute, der Konstruktor hat keinen Parameter und setzt beide Startwerte. einwerfen ist ein Auftrag (void), istVoll eine Anfrage (boolean). Erst beim fünften Einwurf wird voll wahr.
Gehe die Klasse von oben nach unten durch und achte auf Klammern, Typen und Startwerte.
Zähle bei den Attributen die Zeilen mit private. Frage bei den Methoden nach dem Wort vor dem Namen.