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: class Robot { Robot(…) { … } // Robot constructor SomeObject(…) { … } // your SomeObject “constructor” // etc. } and here’s your declaration of parent: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.
Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.






















