| Author |
Initialization and Inheritance
|
Rob Chong
Greenhorn
Joined: Jan 26, 2004
Posts: 3
|
|
I am working on an exercise to explain the process of initialization in an inheritance context. This this the program I wrote and the explaination of the process. Will someone please comment if I am on the right track. Thank you in advance. class Manager { private int i = 2; protected int j; Manager() { System.out.println("i = " + i +", j = " + j); j = 28; } private static int x1 = printInit("static Manager.x1 initialized"); static int printInit(String s) { System.out.println(s); return 33; } } class Foreman extends Manager { private int k = printInit("Foreman.k initialized"); public Foreman() { super(); System.out.println("k = " + k); System.out.println("j = " + j); } private static int x2 = printInit("static Foreman.x2 initialized"); public static void main(String [] args) { System.out.println("Foreman constructor"); Foreman b = new Foreman(); } } public class Apprentice extends Foreman { private int m = printInit("Apprentice.m initialized"); public Apprentice() { System.out.println("m = " + (m=77)); System.out.println("j = " + j); } private static int x3 = printInit("static Apprentice.x3 initialized"); public static void main(String [] args) { System.out.println("Apprentice constructor"); Apprentice b = new Apprentice(); } } // Process of class loading: // When you first run the Foreman program, Java will first // try to access the main() method. In the process Java // loader notices that the Foreman class has a base class // via the keyword "extends", which it then loads with or // without an object of the base class been created. For // example commenting out Foreman b = new Foreman in the // main() will not affect compilation. The object of Foreman // is an object of Manager in inheritance. // In cases where the based class has its own based // class (in this case Manager),and also other based clases // up the heirarchy, that second based class (Manager) will // be loaded and so on. // Next, the static initialization occurs and the root base // class (the Manager class) is performed followed by the // next subclass and so on.The continuation of this prcess // is dependend on the proper initialization of the // base-class members. // From here on, all necessary class would have been loaded, // and object can be created. First. all the primitives in // this object are set to default values of 0 and the object // references are set to null. Then the constructor will be // called. Constructor call is automatic. You may call // the base-class constructor by using super. // After the last base-class constructor completes, the // instance variables are initialized followed by the rest // of the body of the constructor is executed. // The proces of the output: // The program is loaded and main() method is called. // In the process of loading the main() an "extends" keyword // is found and the base-class (Foreman) is loaded. // While loading the second based-class (Foreman) another // extends" is found and this second base-class is again // loaded. // Next the initialization. // The static initialization in the root base class (in this // case, Manager) is performed, and then the next derived // class (Foreman) is performed. If all the static members // are properly initialized, the necccesary classes would // all been loaded and object can be created. // Next the setting of primitives in this object to their // default values of 0 and the object refernces to null (no // object references in this case) are performed. // Then the base-classes constructors are called in the // order of Manager constructor followed by and the Foreman // constructor. // After the base-class constructors complete, instance // variables are initialized in letter order. The order of // initailzation is first the top base-class instance // variables then the subclasses instance variable all in // order of derivation. // Finally, the remaining body of the last constructor is // executed. /* The Output: static Manager.x1 initialized static Foreman.x2 initialized static Apprentice.x3 initialized Apprentice constructor i = 2, j = 0 Foreman.k initialized k = 33 j = 28 Apprentice.m initialized m = 77 j = 28 Press any key to continue . . . */
|
 |
 |
|
|
subject: Initialization and Inheritance
|
|
|