JAVA constructor and java Constructor
Let's take a look at two classes: Base and Derived. Note the whenAmISet member variables and the method preProcess ().
Scenario 1: (No constructor for subclass)
class Base { Base() { preProcess(); } void preProcess() { }}class Derived extends Base { public String whenAmISet = "set when declared"; void preProcess() { whenAmISet = "set in preProcess()"; }}public class StaticTest { public static void main(String[] args) { Derived d = new Derived(); System.out.println(d.whenAmISet); }}
After the. java source code is converted into a. class file, it is converted into equivalent code similar to the following:
class Base { Base() { preProcess(); } void preProcess() { }}class Derived extends Base { public String whenAmISet; {whenAmISet = "set when declared";} void preProcess() { whenAmISet = "set in preProcess()"; }}public class StaticTest { public static void main(String[] args) { Derived d = new Derived(); System.out.println(d.whenAmISet); }}
The output result is: set when declared.
Scenario 2: (constructor added to subclass)
class Base { Base() { preProcess(); } void preProcess() { }}class Derived extends Base { public String whenAmISet = "set when declared"; public Derived() { whenAmISet = "set in constructor"; } void preProcess() { whenAmISet = "set in preProcess()"; }}public class StaticTest { public static void main(String[] args) { Derived d = new Derived(); System.out.println(d.whenAmISet); }}
After the. java source code is converted into a. class file, it is converted into equivalent code similar to the following:
class Base { Base() { preProcess(); } void preProcess() { }}class Derived extends Base { public String whenAmISet; public Derived() { whenAmISet = "set when declared"; whenAmISet = "set in constructor"; } void preProcess() { whenAmISet = "set in preProcess()"; }}public class StaticTest { public static void main(String[] args) { Derived d = new Derived(); System.out.println(d.whenAmISet); }}
Output result: set in constructor
Cause analysis: