黑马程序员技术交流社区

标题: 内部类的一些总结 庆礼可以来看一下 [打印本页]

作者: 周朋飞    时间: 2012-6-25 02:52
标题: 内部类的一些总结 庆礼可以来看一下
class OA {
OA() {System.out.println("OA");}
class IA {
IA() {System.out.println("OA.IA");}
void f() {System.out.println("OA.IA.f()");}
}
IA ia = new IA();
void set(IA a) {ia = a;}
void g() {ia.f();}
}
class OB extends OA{
OB() {System.out.println("OB"); set(new IA());}
class IA extends OA.IA {
IA() {System.out.println("OB.IA");}
void f() {System.out.println("OB.IA.f()");}
}
}
public class NestedInner {
public static void main(String[] args) {
new OB();
}

}
输出结果为
OA.IA
OA
OB
OA.IA
OB.IA
我的理解是先初始化父类OA的成员变量IA 然后是父类自己  然后是子类 自己 ,但是子类里面有调用了set方法
子类里的成员变量IA继承自OA.IA所以在调用OA里的IA  然后是子类的成员IA的构造函数  我的理解是这样 希望大家来讨论一下
作者: 孙飞    时间: 2012-6-25 06:40
class OA
{
        OA()
        {System.out.println("OA");}
        class IA
        {
                IA()
                {System.out.println("OA.IA");}//为什么要先初始化这个呢?
                void f()
                {System.out.println("OA.IA.f()");}
        }
        IA ia = new IA();
        void set(IA a)
                {ia = a;}
        void g()
                {ia.f();}
}
class OB extends OA
{
        OB()
                {System.out.println("OB");
                        set(new IA());}
class IA extends OA.IA
        {
                IA()
                        {System.out.println("OB.IA");}
                void f()
                        {System.out.println("OB.IA.f()");}
}
}
public class Test3
{
        public static void main(String[] args)
                {
                        new OB();
                }

}
作者: 周朋飞    时间: 2012-6-25 18:09
因为首先会初始化父类的成员变量 然后是父类的构造函数 然后才是子类  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2