2016-07-24 6 views

Antwort

0

Nein, das geht nicht.

Die beiden Konstruktoren würden die gleiche Signatur haben: MyClass(double, double, double).

Um die beiden zu unterscheiden, müssen Sie ihnen unterschiedliche Namen geben, und das können Sie nicht mit Konstruktoren tun.

Sie können jedoch anders benannte statische Methoden anstelle von Konstruktoren verwenden, z.

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 
} 
0

Ja, Sie können es tun.

Sie können überladene Konstruktoren verwenden, genauso wie Sie überladene Methoden verwenden würden. Sie müssen nur sicherstellen, dass Sie sie richtig überladen, sodass für die JVM keine Zweideutigkeit besteht, wenn ein Objekt instanziiert wird.

+0

Aber Mehrdeutigkeit gebunden ist geschehen, sehen Sie meine Frage, die beiden Objekte müssen drei Parameter (abc und acd), und alle Parameter (ABCD ist von derselben Art, die doppelt so hoch ist). – Roker

+0

Sie müssen einen weiteren Parameter hinzufügen, um anzugeben, welches Objekt in diesem Fall erstellt werden soll. Ein boolescher Wert ist ausreichend, da Sie nur zwei Optionen haben. –

0

Sie können oder nicht tun, je nachdem, was die Typen object1 und object2 sind.

Nehmen wir an, Sie haben eine Klasse Foo. Wenn Sie object und object2 Typ beide wollen Foo, dann können Sie dies erreichen, wie folgt aus:

class Foo{ 
    //some methods.... 

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

    public Foo(String arg1forObj2, String arg2ForObj2...){ 
     //some code  
    } 
} 

Sie beachten, dass die beiden Konstrukteure sollten nicht die gleiche Art von Argumenten entgegennehmen, sonst werden sie nicht eindeutig sein.


immer Sie object1 und object2 seine verschiedenen Typen wollen, nicht Sie dies nicht erreichen können. Wenn Sie new Foo() ausführen (dh eine Instanz der Klasse erstellen), hat die Instanz immer den Typ Foo.

Verwandte Themen