Konstruktoren initialisieren nur vorhandene Objekte. Der Unterschied zwischen einem Konstruktor- und einem Methodenaufruf ist das Schlüsselwort new
. z.B. Sie können eine Methode Object
in der Klasse Object
haben, aber dies kann nichts erstellen. Wenn Sie Unterklassen haben, ist dies noch verwirrender.
class A {
A() { } // constructor
static A A() { return new A(); } // method
static A B() { return new A(); } // method
}
class B extends A {
B() { }
}
A b = new B(); // creates a B
A a = B.B(); // creates an A
Der Punkt des new
Schlüsselwort ist es klar zu machen, wenn ein neues Objekt erstellt wird.
BTW Sie können eine Factory-Methode verwenden, die ein neues Objekt zurückgibt, wie Sie vorschlagen, aber es explizit zu machen, kann als klarer betrachtet werden, was es tatsächlich tut.
Kurz gesagt, 'new' reserviert Speicher, Konstruktor richtet es ein. – Pshemo
'x = Foo()' ist ein Methodenaufruf. 'x = new Foo()' ist ein Konstruktoraufruf. "neu" beeinflusst tatsächlich, wie der Code verstanden wird. – khelwood
http://stackoverflow.com/q/7019754/982149 – Fildor