Angenommen, ich habe eine Klasse (sagen wir Klassenname ist "MyClass") mit Daten (a, b, c, d) kann zwei Konstruktoren definieren, eine zum Erstellen von Objekt1 mit Daten (a, b, c) und anderen Konstruktor, um Objekt2 unter Verwendung von Daten (a, c, d) zu erzeugen. In diesem Fall sind alle Daten gleich, sagen wir mal doppelt.Kann ich mit Hilfe des Konstruktors in Java mehr als einen Objekttyp aus denselben Klassendaten erstellen?
Antwort
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
}
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.
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
.
- 1. Mehr als einen Kreis in Java erstellen
- 2. Komplexität des Java-ArrayList-Konstruktors
- 3. Aufruf des Konstruktors als Funktion in C#
- 4. Verweise auf einen Objekttyp Java
- 5. Aufruf des Java Web Service-Konstruktors
- 6. Aufruf des Konstruktors mit Member als Argument als Variablendefinition
- 7. Kann ein Java Enum mehr als einen Konstruktor haben?
- 8. Wie kann ich ein Delphi-Objekt aus einer Klassenreferenz erstellen und die Ausführung des Konstruktors sicherstellen?
- 9. Aufrufhierarchie des Konstruktors
- 10. Java NoSuchMethodException beim Ermitteln des Konstruktors
- 11. Kann ich mehr als einen sectionNameKeyPath in einem fetchedResultsController verwenden?
- 12. Zugreifen auf Klassendaten aus dem Rückruf
- 13. Unvorhersagbarkeit des BigDecimal (Doppel) Konstruktors
- 14. Kann "new" innerhalb des Konstruktors der Klasse verwendet werden, um einen anderen Konstruktor in Java aufzurufen?
- 15. Kann ich mehr als einen Konverter deklarieren? WP8
- 16. jmap stürzt ab mit "kann keine Klassendaten abrufen für"
- 17. Primitive vs Objekttyp in Java
- 18. Kann nicht mit WebSQL/Chrom mehr als eine Tabelle erstellen
- 19. Vorteile der Überladung des Konstruktors
- 20. Mit "this" beim Aufruf des Super-Konstruktors?
- 21. Kann ich eine Ergebnismenge aus einer Datei in Java erstellen?
- 22. Bereich des privaten Konstruktors in Nested Class
- 23. Aufruf eines Konstruktors als Methode
- 24. Erstellen von Objekten aus einem anderen Objekt mit denselben Eigenschaften
- 25. scala Typparameter als Objekttyp
- 26. Festlegen des parameterlosen Konstruktors als Injektionskonstruktor bei der Containererstellung
- 27. Mit Hilfe einer Unterabfrage mehr zur Liste als mittelt
- 28. Django: Wie kann ich mehr als einen Datensatz gleichzeitig aktualisieren?
- 29. Kann in Laravel eine Migrationsdatei mehr als eine Tabelle erstellen?
- 30. Wie erhalte ich mehr als einen Ausnahmetyp?
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
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. –