Polymorphism and Constructors

java, polymorphism

Solution

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 calls `super()`, which invokes the java.lang.Object constructor, which doesn't print anything. Then `methodOne()` is called. Since the object is of type B, the B's version of `methodOne` is called, and `B` is 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.

Problem

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?

Original source