I am an AP Java Student and I am practicing for my exam. I came across this question and I don’t understand the answer:
Consider the following classes:
public class A
{
public A() { methodOne(); }
public void methodOne() { System.out.print("A"); }
}
public class B extends A
{
public B() { System.out.print("*"); }
public void methodOne() { System.out.print("B"); }
}
What is the output when the following code is executed:
A obj = new B();
The correct answer is B*. Can someone please explain to me the sequence of method calls?
The B constructor is called. The first implicit instruction of the B constructor is
super()(call the default constructor of super class). So A’s constructor is called. A’s constructor callssuper(), which invokes the java.lang.Object constructor, which doesn’t print anything. ThenmethodOne()is called. Since the object is of type B, the B’s version ofmethodOneis called, andBis printed. Then the B constructor continues executing, and*is printed.It must be noted that calling an overridable method from a constructor (like A’s constructor does) is very bad practice: it calls a method on an object which is not constructed yet.