public class Foo {
private int x;
private static char c = 'c';
Foo(int x) {
this.x = x;
}
Foo() {
x = 42;
}
class Bar {
Object y;
void m(Foo foo) {
y = new Object();
}
void m(String foo) {
y = foo;
}
Bar() {
y = new Object();
}
}
Object z() {
return new String();
}
}
a) Welche Datentypen werden verwendet? Welche davon sind Basisdatentypen?
b) Welche Konstanten enthält das Programm?
c) Welche benannten Konstanten sind enthalten?
d) Welche Variablendeklarationen finden Sie?
e) Welche formalen Parameter können Sie entdecken?
f) Welche Attribute sind zu finden? Unterscheiden Sie in Objekt- und Klassenattribute.
g) Welche Konstruktoren sind zu finden?
h) Welche Methoden sind zu finden? Unterscheiden Sie in Objekt- und Klassenmethoden.
i) Wo finden Überladungen statt?
j) In welchen Methoden kann bzw. könnte man auf das Attribut y zugreifen?
a) Welche Datentypen werden verwendet? Welche davon sind Basisdatentypen?
public class Foo /* (class Foo) Referenztyp/Klassentyp */
private int x; /* und */ Foo(int x) /* (int) Primitiver Datentyp/Basisdatentyp */
private static char c = 'c'; /* (char) Primitiver Datentyp/Basisdatentyp */
class Bar /* (class Bar) Referenztyp/Klassentyp */
Object /* Referenztyp/Klassentyp */
String /* Referenztyp/Klassentyp */
void /* Basisdatentyp - wenn auch kein Typ im eigentlichen Sinne */
b) Welche Konstanten enthält das Programm?
in private static char c = 'c'; die Konstante 'c'
in x = 42; die Konstante 42
c) Welche benannten Konstanten sind enthalten?
Benannte Konstanten gibt es in diesem Fall keine, was in (b) genannt wurde sind unbenannte, benannte fangen mit dem Schlüsselwort final an
d) Welche Variablendeklarationen finden Sie?
private int x;
private static char c = 'c';
Object y;
e) Welche formalen Parameter können Sie entdecken?
in Foo(int x) ... den formalen Parameter x, vom Typ int
in void m(Foo foo) ... den formalen Parameter foo vom Typ Foo
void m(String foo) ... den Formalen Parameter foo vom Typ String
f) private int x;
private static char c = 'c';
Object y;
f.1) Objektattribute sind:
- private int x; /* also x, weil da kein static steht */
- Object y; /* also y, weil da kein static steht */
f.2) Klassenattribute sind
- private static char c = 'c'; /* als c, weil da static steht */
g) Welche Konstruktoren sind zu finden?
- Bar() ... in der Klasse Bar
- Foo(int x) ... in der Klasse Foo (wobei hier der Konstruktor überladen wurde)
- Foo() ... in der Klasse Foo (wobei hier der Konstruktor überladen wurde)
h) Welche Methoden sind zu finden? Unterscheiden Sie in Objekt- und Klassenmethoden.
- void m(Foo foo) ... wobei diese Methode überladen wurde
- void m(String foo) ... wobei diese Methode überladen wurde
Beide sind Objektmethoden, denn es steht kein Schlüsselwort static vorran
i) Wo finden Überladungen statt?
Überladungen finden so wohl bei
- Foo(int x) ... in der Klasse Foo (wobei hier der Konstruktor überladen wurde)
- Foo() ... in der Klasse Foo (wobei hier der Konstruktor überladen wurde)
also auch bei
- void m(Foo foo) ...
- void m(String foo) ... wobei diese Methode überladen wurde
statt
j) In welchen Methoden kann bzw. könnte man auf das Attribut y zugreifen?
man kann nur in den Methoden:
void m(Foo foo) ...
void m(String foo) ...
Bar() ...
wobei Bar ein Konstruktur ist, auf die Variable y zugreifen, weil sie lokal zu der Klasse Bar ist und nur diese Methoden und nur dieser Konstruktor innerhalb von Bar definiert wurde.