Hallo, ich schreibe demnächst meine erste Java-Klausur und mein Prof denkt sich sehr gerne möglichst unübersichtlichen Code aus den man dann lesen soll um dann die aufgerufenen Objekte/Attribute herauszufinden. Was das pragmatische Programmieren angeht schätze ich mich als nicht so schlecht ein, mit diesen teils für mich seltsamen Aufrufen weiß ich nicht immer was anzufangen. Wenn mir mal jemand erläutern könnte
Eine Aufgabe wäre z.B.
Die Konstuktoraufrufe sind mir klar.
Was mir nicht so klar ist sind die Punktoperatoren. Das Ergebnis wäre hier 3,2,6. Wie muss ich vorgehen um auf dieses Ergebnis zu kommen, was wird wann aufgerufen etc.
Auch wenn ich mir ungefähr denken kann wie die Werte zustande kommen.
Eine andere Möglichkeit wäre dieses hier:
Hier weiß ich zwar auch durchs Kompilieren dass x.i = 4 und y.i 6 sind, aber wie zum Henker man darauf kommt weiß ich nicht. Wo muss ich hier bei den Punktoperatoren starten, wie geht es dann weiter?
Ich weiß natürlich generell wie Punktoperatoren Funktionieren: object.attribute/methode
Ich habe aber Probleme bei diesem Code genau herauszufinden wie das zu den bestimmten Ergebnissen führt.
Über ein bisschen Hilfe oder Tipps würde ich mich sehr freuen.
Eine Aufgabe wäre z.B.
Code:
class A {
int i = 2;
A() { System.out.println ("A"); }
void f (A a ) { System.out . println ( i ); }
}
class B extends A {
int j = 3;
B () { System.out.println ("B"); }
void f (A a ) { System.out . println ( j ); }
void f (B a ) { System.out . println ( 2*j ); }
}
class Main1 {
public static void main(String [] args ) {
A a = new B();
A b = new A();
B c = new B();
a. f (b );
b. f (a );
c. f (c );
} }
Die Konstuktoraufrufe sind mir klar.
Was mir nicht so klar ist sind die Punktoperatoren. Das Ergebnis wäre hier 3,2,6. Wie muss ich vorgehen um auf dieses Ergebnis zu kommen, was wird wann aufgerufen etc.
Auch wenn ich mir ungefähr denken kann wie die Werte zustande kommen.
Eine andere Möglichkeit wäre dieses hier:
Code:
public class Attribute {
public static void main(String[] args) {
class A extends Attribute {
public int i ;
A(int i ) { this . i=i ; }
void f(A a ) { i=a. i +1; }
void g(A a ) { a. i=this . i +2; }
void h(A a ) { a = new A(a.i +3); }
}
A x = new A(2), y = new A(3);{
x.f(y);
x.g(y);
x.h(y);
System.out.println(x.i);
System.out.println(y.i);
}
}
}
Hier weiß ich zwar auch durchs Kompilieren dass x.i = 4 und y.i 6 sind, aber wie zum Henker man darauf kommt weiß ich nicht. Wo muss ich hier bei den Punktoperatoren starten, wie geht es dann weiter?
Ich weiß natürlich generell wie Punktoperatoren Funktionieren: object.attribute/methode
Ich habe aber Probleme bei diesem Code genau herauszufinden wie das zu den bestimmten Ergebnissen führt.
Über ein bisschen Hilfe oder Tipps würde ich mich sehr freuen.