A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周朋飞 中级黑马   /  2012-6-25 02:52  /  1234 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的构造函数  我的理解是这样 希望大家来讨论一下

2 个回复

倒序浏览
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();
                }

}

评分

参与人数 1黑马币 +10 收起 理由
黄奕豪 + 10

查看全部评分

回复 使用道具 举报
因为首先会初始化父类的成员变量 然后是父类的构造函数 然后才是子类  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马