2010-03-03 110 views
23

这是面试中提出的问题。 如果一个类在java中有多个构造函数,什么时候可以调用另一个构造函数,我们可以调用另一个构造函数吗?在java中调用另一个构造函数

+0

你能澄清这个问题吗?有多个构造函数可以创建不同的对象,并可以从其他类中调用。他们只是为了这个目的而制造的。 – 2010-03-03 18:44:03

+4

他意味着从另一个调用构造函数。 – Woot4Moo 2010-03-03 18:45:51

+0

他问是否允许从另一个构造函数调用构造函数,或者每当一个类具有多个构造函数时,它是否允许调用构造函数 – Francis 2015-06-28 16:07:38

回答

36

你就可以了,我知道的语法是

this(< argument list >); 

您也可以拨打通过

super(< argument list >); 

父类的构造函数都这种调用只能作为第一个语句来完成构造函数(所以你只能调用另一个构造函数,并且在其他任何事情完成之前)。

+6

10你不能做任何需要引用的东西。 – 2010-03-03 19:18:00

+0

它也必须在构造函数的第一行 – sixtyfootersdude 2010-07-11 00:51:11

+0

是的,第一行所以它将是第一个被实现的 – Francis 2015-06-28 16:05:38

6
this(other, args); 
+3

这可能是误导或错误!其他是什么?你只需使用'this(args-required-by-constructor)'或'super(args-required-by-constructor)来调用另一个构造函数;' – 2010-03-03 19:15:13

5

例如:

public class FileDb { 

    /** 
    * 
    */ 
    public FileDb() { 
    this(null); 
    } 

    public FileDb(String filename) { 
    // ... 
    } 

} 
9

是的,你可以做到这一点。

看一看在ArrayList实现,例如:

public ArrayList(int initialCapacity) { 
    super(); 
    if (initialCapacity < 0) 
     throw new IllegalArgumentException("Illegal Capacity: "+ 
              initialCapacity); 
    this.elementData = new Object[initialCapacity]; 
} 

/** 
* Constructs an empty list with an initial capacity of ten. 
*/ 
public ArrayList() { 
    this(10); 
} 

第二构造函数调用的第一个十的default capacity

9

没有一个答案是完整的,所以我加入这个填空白。

您还可以从另外一个构造函数在同一个班级,或调用超类,有以下限制:

  1. 它必须是代码中调用构造函数的第一行。
  2. 它不能有任何明确或隐含的引用this。所以你不能传递一个内部类(如果它引用了任何实例方法,那么是匿名的),或者是一个非静态方法调用的结果作为参数。

(如其他人所说)的语法是:

MyClass() { 
    someInitialization(); 
} 

MyClass(String s) { 
    this(); 
    doSomethingWithS(s); 
} 
相关问题