我有点困惑。根据理论,如果我们在类中指定任何参数构造函数,那么编译器不会生成无参数构造。(这就是为什么我们在继承此类的情况下会得到错误)。现在假设我有一个这样的类
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()
(因为类没有任何无参数构造函数) ,那么这个调用栈是如何工作的?
答案 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)
{
}