call one constructor from another in java
本问题已经有最佳答案,请猛点这里访问。
这是采访中问的问题。如果一个类在Java中有多个构造函数,什么时候调用另一个构造函数,那么我们可以调用另一个构造函数吗?我怎么称呼我是指语法?
你可以,我知道我的语法是
1 | this(< argument list >); |
你也可以通过调用超类的构造函数
1 | super(< argument list >); |
两个这样的调用可以做的只能在构造函数的第一个语句(你只能调用一个构造函数和其他人在做什么,是)。
是的,你可以这么做。
有一个看《
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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); } |
第二个构造函数调用的第一个与
答案是不完整的,所以我在这一个填写的空白。
你可以调用另一个构造函数中的一个,从相同的类的超类,或呼叫,具有以下的限制:
《语法的人是:(继续)
1 2 3 4 5 6 7 8 |
你瞧,这是一telescoping /构造函数叫做伸缩模式。
这是一个显式的构造函数中讨论的8.8.7.1 invokations JLS
- Alternate constructor invocations begin with the keyword
this (possibly prefaced with explicit type arguments). They are used to invoke an alternate constructor of the same class.- Superclass constructor invocations begin with either the keyword
super (possibly prefaced with explicit type arguments) or a Primary expression. They are used to invoke a constructor of the direct superclass.
1 | this(other, args); |
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class FileDb { /** * */ public FileDb() { this(null); } public FileDb(String filename) { // ... } } |