How Code in Frame Constructs Object Whose Constructor is Declared in Another Fra

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:
   Robot *a;   a = malloc(sizeof(Robot));   Robot(a, x, y, z); 
Assume the class 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 call
new 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.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: