当你的类没有无参数构造函数时,为什么它可以正常?

时间:2017-11-06 08:04:37

标签: java

我有点困惑。根据理论,如果我们在类中指定任何参数构造函数,那么编译器不会生成无参数构造。(这就是为什么我们在继承此类的情况下会得到错误)。现在假设我有一个这样的类

public class Response
{
    String gMessage;
    String gAvilableAmount;

    public Response( String gMessage,
        String gAvilableAmount )
    {
        super();
        this.gMessage = gMessage;
        this.gAvilableAmount = gAvilableAmount;
    }  
}  

它只有一个构造函数,它有两个参数,它的主体调用super()(参数less构造函数,它不可用)。现在我有一个主要方法:

public class TesterMain
{
    public static void main( String[] args )
    {
        Response lResponse = new Response( "dd", "dd" );
        System.out.println( lResponse );
    }
}

它没有任何错误。 我的问题是主要是调用new Response( "dd", "dd" ),它再次调用Response的双参数构造函数,它具有第一行super()(因为类没有任何无参数构造函数) ,那么这个调用栈是如何工作的?

2 个答案:

答案 0 :(得分:2)

Object包中的java.lang类位于类层次结构树(doc)的顶部 因此,当您在类构造函数中调用super()时,可以调用java.lang.Object构造函数。

答案 1 :(得分:1)

你对super()和this()

感到困惑

this(),this(param1,param2) - 是我们在类构造函数中调用的方式。例如

public Response(param1,param2)
{
    this(param1);
}

public Response(param1)
{

}

super(),super(param1) - 就是你如何称呼你父母的构造函数。

public class Response extends SuperResponse
{
     public Response(param1)
     {
         super(param1);
     }
}

public class SuperResponse
{
     public SuperResponse(param1)
     {
      }