chenjiananxd 2012-02-23 16:27
浏览 216
已采纳

关于构造方法的一点疑惑,为什么父类的构造方法之后还调用了其他的构造方法?

表述不清,直接上代码

class A {
A(){
System.out.println("A()");
}
A(int i){
System.out.println("A(1)");

}

}

class B {
B(){
System.out.println("B()");
}

}
class C extends A{
B b=new B();
C(){
super(5);
System.out.println("C()");
}

}

public class Fifth {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    C c=new C();

}

}
输出是:
A(1)
B()
C()
问题是为什么在A(1)之后才出B(),这样等于c的构造方法被打断了不是麽?新手就执教

  • 写回答

3条回答 默认 最新

  • iteye_16709 2012-02-23 18:45
    关注

    java中构造一个类的整个过程可以理解为:
    1。构造父类 然后构造本类
    2。本类成员变量初始化
    3。调用本类构造方法

    创建c时先调用类A的构造方法。类A有两个构造方法,调用谁?
    [code="java"]super(5);
    [/code]
    这里你已经指定了调用父类含参数的构造方法。
    所以输了A(1)

    这是第一步。

    第二步:实例化自身成员变量
    所以就有了B()

    第三步:
    [code="java"]System.out.println("C()");
    [/code]

    所以这里你的
    [code="java"]super(5);
    [/code]
    就有点不好理解。这是java语言规范。
    看看反编译结果:
    [code="java"]
    // Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2012-2-23 18:35:45
    // Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
    // Decompiler options: packimports(3)
    // Source File Name: C.java

    package constructor;

    import java.io.PrintStream;

    // Referenced classes of package constructor:
    // A, B

    public class C extends A
    {

    C()
    {
        super(5);
        b = new B();
        System.out.println("C()");
    }
    
    B b;
    

    }
    [/code]

    这是class文件反编译的结果。
    这样就可以验证我的说法了。

    [code="java"]super(5);
    [/code]
    把上面的代码注释掉后,结果:
    A()
    B()
    C()

    反编译结果:
    [code="java"]A()
    B()
    C()[/code]

    发编译器:DJ Java Decompiler

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波