Question:
How can code in one frame construct an object whose constructor is declared in another frame? For example, new parent.SomeObject();
does not seem to work.
Why?
Answer:
Good question! As in C++, constructors in Java are not considered methods. They don’t return values, and the implicit “this” parameterpassed to a constructor is a pointer to the memory area allocated by thecall to new immediately preceding the constructor. Thus,
new Robot(x, y, z);
is roughly equivalent to the C code:Assume the classRobot *a; a = malloc(sizeof(Robot)); Robot(a, x, y, z);
Robot
looks like this:and here’s your declaration of parent:class Robot { Robot(…) { … } // Robot constructor SomeObject(…) { … } // your SomeObject “constructor” // etc. }
Robot parent = new Robot(…);
Unfortunately for you, Java regards SomeObject
as an ordinary Robot
method, not a constructor. Thus, the callnew parent.SomeObject(x, y, z);
would (if it worked at all) pass a pointer to parent as the implicitparameter of SomeObject
, not the space allocated by new:SomeObject(parent, x, y, z);
This picture could become murky in the near future; I hear Sun isconsidering nested classes in a future release of Java.