class Egg2{
        protected class Yolk{//inner class
                public Yolk(){
                        System.out.println("Egg2.Yolk()");
                }
                public void f(){
                        System.out.println("Egg2.Yolk.f()");
                }
        }
        private Yolk y = new Yolk();//应该是看做一个成员变量,与System.out差不多,////////变量的初始化应该是在对象实例化的时候
        public Egg2(){//base class构造函数
                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{//继承inner class
                public Yolk(){
                        System.out.println("BigEgg2.Yolk()");
                }
                public void f(){
                        System.out.println("BigEgg2.Yolk.f()");
                }
        }
        public BigEgg2(){//构造函数
                insertYolk(new Yolk());
        }
        public static void main(String [] args){
                Egg2 e2 = new BigEgg2();
                e2.g();
        }
}

解决方案 »

  1.   

    class Egg2{
            protected class Yolk{//inner class
    .....
    你怎么在一个类中又申明一个新的类呢?
      

  2.   

    我晕。不是内隐类吗?
      我就是搞不懂,  private Yolk y = new Yolk();//应该是看做一个成员变量,与System.out差不多???////////变量的初始化应该是在对象实例化的时候????
    说白了就是
    1.父类中有内隐类的对象的子类是如何实例化的?
    2.还有就是父类当中的成员变量是在什么时候初始化的?我只知道子类的成员变量是在子类对象的实例化开始的时候初始化的,但是父类的成员变量呢?我的理解是子类继承了父类的成员变量,那么子类对象的实例化开始的时候,就会对子类的所有成员变量(其中应该包括父类的成员变量?)进行初始化,但是先对父类的呢,还是先对子类的?
    对于第二个问题,有一个程序:
    //:c06:Beetle.java
    //The full process of initialization.class Insect{
    int i=9;
    int j;//i,j在什么时候被赋值0?
    Insect(){
    prt("i = "+i +", j = "+j);
    j=39;
    }
    static int x1=
    prt("static Inset.x1 initialized");
    static int prt(String s){
    System.out.println(s);
    return 47;
    }
    }

    public class Beetle extends Insect{
    int k=prt("Beetle.k initialized");
    Beetle(){
    prt("k = " +k);
    prt("j = " +j);
    }
    static int x2=
      prt("static Beetle.x2 initialized");
    public static void main(String[] args){
    prt("Beetle constuctor");
    Beetle b=new Beetle();
    //prt("x1 = "+x1);
    //prt("x2 = "+x2);
    prt("main fun end");
    }
    }
    以上问题可能是有点幼稚,但是偶是一新手,对于一个程序代码的执行顺序都搞不懂,感觉很不舒服。烦请老手帮帮忙!!!
      

  3.   

    其中初始化指的是隐式的,当隐式初始化完成之后,会对构造方法中的形参赋值,然后看看有没有this语句(看看是不是用this()调用了重载的构造函数,构造函数不能被直接调用,只能通过这种方式调用),然后是super(),再就是当前类的成员变量显示初始化,最后当前执行构造方法的代码