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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?