overriding  inner classess

Posted on 2006-04-14
Last Modified: 2010-03-31
The following code:
class Egg2 {
  protected class Yolk {
    public Yolk() { System.out.println("Egg2.Yolk()"); }
    public void f() { System.out.println("Egg2.Yolk.f()");}
  private Yolk y = new Yolk();
  public Egg2() { System.out.println("New Egg2()"); }
  public void insertYolk(Yolk yy) { y = yy; }
  public void g() { y.f(); }

public class BigEgg2 extends Egg2 {
  public class Yolk extends Egg2.Yolk {
    public Yolk() { System.out.println("BigEgg2.Yolk()"); }
    public void f() {
  public BigEgg2() { insertYolk(new Yolk()); }
  public static void main(String[] args) {
    Egg2 e2 = new BigEgg2();
} ///:~

New Egg2()
1)  Is the first Egg2.Yolk() created by an upcast  via insertYolk method of the BigEgg2 constructor which in turn intantiates the Yolk constructor?
2) Next the base class Egg2's constructor is called resulting in: New Egg2?
3) I am at a loss as to how the last three were instantiated....

Question by:kellyputty
    LVL 4

    Accepted Solution

    Because Java silently added line Super() as first line in a constructor. So infact your constructor looks like this:
                  then your codes here....

    Therefore Egg2 is instantiated first. Also because all class-member variables are loaded before its constructor at runtime so this line in your code:
             private Yolk y = new Yolk();

    is loaded first hence initial output: "Egg2.Yolk()" then whatever codes in Egg2(). So next output is "New Egg2". So once super() is completed, it then calls the code in BigEgg2()'s constructor which is this next output is "Egg2.Yolk" - again remember super() of yolk is called first - then "BigEgg2.Yolk()".

    Finally e2.g is called.

    Author Comment

    Thank you, I am starting to understand this.
    LVL 4

    Expert Comment


    Featured Post

    Better Security Awareness With Threat Intelligence

    See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

    Join & Write a Comment

    Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
    Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
    Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
    This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

    728 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    21 Experts available now in Live!

    Get 1:1 Help Now