Java Programming - Declarations and Access Control - Discussion


What will be the output of the program?

class Base
public class Alpha extends Base
    public static void main(String[] args)
        new Alpha(); /* Line 12 */
        new Base(); /* Line 13 */

[A]. Base
[B]. BaseBase
[C]. Compilation fails
[D]. The code runs with no output

Answer: Option B


Option B is correct. It would be correct if the code had compiled, and the subclass Alpha had been saved in its own file. In this case Java supplies an implicit call from the sub-class constructor to the no-args constructor of the super-class therefore line 12 causes Base to be output. Line 13 also causes Base to be output.

Option A is wrong. It would be correct if either the main class or the subclass had not been instantiated.

Option C is wrong. The code compiles.

Option D is wrong. There is output.

Sainath said: (Jul 8, 2011)  
Can you explain clearly how it is executed?

Aniket Harjai said: (Aug 29, 2011)  
I think the answer shud be compilation fails because if there is a base class constructor then there shud be necessarily a derived class constructor which wud have super(); as its 1st sentence 2 make a call to base class constructor.

Supremewa said: (Sep 28, 2014)  
When you first call new Alpha(), you call the default constructor of Alpha. Since it is not explicitly declared, it is implicitly defined as :

public Alpha() {

Therefore, new Alpha() calls the default constructor of Base (Becauses Alpha is a subclass of Base), which prints "Base". Then, new Base() also calls that constructor and prints again "Base", resulting in a final output of "BaseBase".

Mani said: (Jun 8, 2018)  
Very useful, Thanks.

Serg said: (May 26, 2021)  
It would be correct if the code had compiled. But the code would not compile. So, Compilation fails.

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.