如何在Java中从另一个构造函数调用另一个构造函数?

2022-08-31 01:23:30

是否可以从另一个构造函数调用构造函数(在同一类中,而不是从子类中)调用构造函数?如果是,如何?调用另一个构造函数的最佳方法是什么(如果有几种方法可以做到这一点)?


答案 1

是的,有可能:

public class Foo {
    private int x;

    public Foo() {
        this(1);
    }

    public Foo(int x) {
        this.x = x;
    }
}

要链接到特定的超类构造函数而不是同一类中的超类构造函数,请使用 代替 。请注意,您只能链接到一个构造函数,并且它必须是构造函数体中的第一个语句superthis

另请参阅此相关问题,该问题与 C# 有关,但相同的原则适用。


答案 2

用。首选模式是从最小的构造函数到最大的构造函数。this(args)

public class Cons {

    public Cons() {
        // A no arguments constructor that sends default values to the largest
        this(madeUpArg1Value,madeUpArg2Value,madeUpArg3Value);
    }

    public Cons(int arg1, int arg2) {
       // An example of a partial constructor that uses the passed in arguments
        // and sends a hidden default value to the largest
        this(arg1,arg2, madeUpArg3Value);
    }

    // Largest constructor that does the work
    public Cons(int arg1, int arg2, int arg3) {
        this.arg1 = arg1;
        this.arg2 = arg2;
        this.arg3 = arg3;
    }
}

您还可以使用最近倡导的价值方法Of或只是“的”:

public class Cons {
    public static Cons newCons(int arg1,...) {
        // This function is commonly called valueOf, like Integer.valueOf(..)
        // More recently called "of", like EnumSet.of(..)
        Cons c = new Cons(...);
        c.setArg1(....);
        return c;
    }
} 

要调用超类,请使用 。对 super 的调用必须是构造函数中的第一个调用,否则将收到编译器错误。super(someValue)