我可以借助Java中的构造函数从同一类数据构造多个类型的对象吗?

我可以借助Java中的构造函数从同一类数据构造多个类型的对象吗?,java,Java,假设我有一个包含数据(a、b、c、d)的类(假设类名为“MyClass”),可以定义两个构造函数,一个用于使用数据(a、b、c)创建object1,另一个用于使用数据(a、c、d)创建object2。在这种情况下,所有数据类型都是相同的,比如说double 是的,你能做到 可以使用重载构造函数,就像使用重载方法一样。您只需要确保正确地重载它们,这样JVM在实例化对象时就不会产生歧义。根据object1和object2的类型,您可以或不能这样做 假设您有一个类Foo。如果您想要object和obj

假设我有一个包含数据(a、b、c、d)的类(假设类名为“MyClass”),可以定义两个构造函数,一个用于使用数据(a、b、c)创建object1,另一个用于使用数据(a、c、d)创建object2。在这种情况下,所有数据类型都是相同的,比如说double

是的,你能做到


可以使用重载构造函数,就像使用重载方法一样。您只需要确保正确地重载它们,这样JVM在实例化对象时就不会产生歧义。

根据
object1
object2
的类型,您可以或不能这样做

假设您有一个类
Foo
。如果您想要
object
object2
这两种类型的
Foo
,那么您可以实现这一点,如下所示:

class Foo{
    //some methods....

    public Foo(int arg1forObj1, int arg2ForObj1...){
        //some code    
    }

    public Foo(String arg1forObj2, String arg2ForObj2...){
        //some code    
    }
}
请注意,这两个构造函数不应采用相同类型的参数,否则它们将是不明确的


然而,您希望
object1
object2
具有不同的类型,不,您无法实现这一点。当您执行
new Foo()
(即创建类的实例)时,该实例将始终是
Foo
类型。

不,您不能这样做

这两个构造函数将具有相同的签名:
MyClass(double,double,double)

为了区分这两者,您必须为它们指定不同的名称,而构造函数不能这样做

但是,您可以创建不同名称的静态方法来代替构造函数使用,例如

public class MyClass {
    // fields here
    public static MyClass forObject1(double a, double b, double c) {
        return new MyClass(a, b, c, 0);
    }
    public static MyClass forObject2(double a, double c, double d) {
        return new MyClass(a, 0, c, d);
    }
    private MyClass(double a, double b, double c, double d) {
        // assign to fields here
    }
    // methods here
}

但是歧义是不可避免的,你看我的问题,两个对象都需要三个参数(abc和acd),所有参数(abcd是同一类型的,是双参数)。你必须添加另一个参数来指示在这种情况下要创建的对象。一个布尔值就足够了,因为您只有两个选项。