This question already has an answer here:
I have the following 2 classes
public class classA {
classA() {
System.out.println("A");
}
}
class classB extends classA {
classB() {
System.out.println("B");
}
}
and then running
1
classA c = new classB();
or
2
classB c = new classB();
always gives
A
B
Why is this happening? At first glance, in either scenario, I would assume that only the classB
constructor would be called and thus the only output would be
B
but this is clearly wrong.
Super class constructor is always called during construction process and it's guaranteed that super class construction is finished before subclass constructor is called. This is the case for most if not all the object oriented language. You could explicitly call super class constructor with parameter if you don't want to invoke the default constructor; otherwise such call is automated by compiler.
There is no difference in both statements in terms of objects being constructed so you see same out put.
Just using a different reference type on left hand side while constructing same objects using
new
is not going to make any difference as far as object creation and constructor chaining is concerned.Whatever difference is there among two of your statements is after objects get created.
That is how Java works. The constructors of the parent classes are called, all the way up the class hierarchy through
Object
, before the child class's constructor is called.Quoting from the docs: