Aufgabe 1.

import lehrbuch.*;

public class Hauptprogramm {

private static Quadrat k1, k2, k3;

public static void main(String[] args) {

try {

k1 = new Quadrat(); k1.darstellen(0, 0); k1.faerben(Farbe.ROT);

k2 = new Quadrat(); k2.darstellen(0, 100); k2.faerben(Farbe.GRUEN);

k3 = new Quadrat(); k3.darstellen(100, 0); k3.faerben(Farbe.BLAU);

} catch (KoordAusn ausnahme) { System.err.println ("Falsche Koordinaten"); }

}

}

Aufgabe 2:

public class Programm {

public static void main(String[] args) {

Hallo hallo1 = new Hallo(), hallo2 = new Hallo();

hallo1.oben.spitze(); hallo1.unten.spitze();

hallo2.oben.spitze(); hallo2.unten.spitze();

}

}

Aufgabe 3:

Aufgabe 4

ˇ Es gibt Java-Programme, die auch ohne einen Interpreter ausgeführt werden können. falsch

Grund: Bytecode kann nicht von der Hardware ausgeführt werden.

ˇ Ein Konstruktor kann den Namen der Oberklasse tragen. falsch

Grund: Eine Methode mit einen anderen Namen als die Klasse ist kein Konstruktor.

ˇ Es gibt Multibehälter, die Datenelemente unterschiedlicher Klassen aufnehmen können. richtig

Grund: polymorphe Multibehälter

ˇ Ein Applet kann keine andere Methoden haben, als was sie von der Klasse java.applet.Applet geerbt hat. falsch

Grund: In der Klassendefinition können weitere Methoden hinzugefügt werden.

ˇ Für Polymorphie ist es notwendig, daß alle Unterklassen diese Methode überschreiben. falsch

Grund: nur die Klassen, für deren Objekte die Methode (polymorph) aufgerufen wird

ˇ Eine Zuweisung kann keine Objekte, nur eine Referenz verändern. richtig

Grund: Nur die Referenz auf der linken Seite wird verändert; Objekte können nur durch Methoden verändert werden.

ˇ Der Typ einer Variable kann zur Laufzeit nicht verändert werden. richtig

Grund: Der Compiler überprüft ihn und legt für immer fest.

ˇ Jede Methode kann auf der rechten Seite einer Zuweisung aufgerufen werden. falsch

Grund: nur die nicht-void-Methoden (Funktionen)

Aufgabe 5.

interface SackAlgebra extends lehrbuch.kapitel8.Sack {

public void plus(final SackAlgebra sack); // Mutator

// public SackAlgebra plus(final SackAlgebra sack); // Alternativ: Funktion // const

public void minus(final SackAlgebra sack); // Mutator

// public SackAlgebra minus(final SackAlgebra sack); // Alternativ: Funktion // const

}

 

Aufgabe 6. Bei jedem Methodenaufruf wird ein neuer Eintrag auf dem Stapel erzeugt. Hier werden die Parameter, die lokalen Referenzen (Variablen) und die Rücksprungadresse auf dem Stapel gespeichert. Bei einem rekursiven Aufruf entstehen mehrere Exemplare derselben Variablen in unterschiedlichen Stapeleinträgen. Bei der Beendigung des Aufrufs wird der Stapeleintrag gelöscht. Es kann immer nur der oberste Eintrag gelöscht, d.h. der zuletzt aufgerufene Methode beendet werden. Die (von den Referenzen referierten) Objekte werden nicht auf dem Stapel, sondern auf der Halde gespeichert, d.h. sie können die Methode überleben, in der sie erzeugt wurden.