Given the following type declarations:
public interface Hoassmem {
public Hoassmem cedSiu(Hoassmem ne);
}
public class Sesa implements Hoassmem {
public Hoassmem cedSiu(Hoassmem ne) {
return ne;
}
}
public class Posphec implements Hoassmem {
public Hoassmem cedSiu(Hoassmem ne) {
return new Sesa();
}
}
...and given the following setup code:
Posphec foo = new Posphec(); Hoassmem bar = new Sesa();
Draw an AST for the following expression, labeling the static type (a.k.a. compile-time type) of each node in the tree:
foo.cedSiu(bar).cedSiu(bar)
(The static type of an expression is the type that the compiler uses to check the code before it runs.)
Draw an AST for the same expression, this time labeling the runtime type of each node in the tree.
(The runtime type of an expression is the type of the actual value that appears when the code runs.)
Related puzzles: