Zunächst einmal, wie trappski
in den Kommentaren hingewiesen, writeExternal
erstellt nichts. ObjectOutput
ist ein Parameter, der von jedem Code übergeben wird, der writeExternal
aufruft.
Der Trick mit Schnittstellen ist, dass sie ein "Vertrag" sind. Sie können keine Objekte über Schnittstellen erstellen, aber Sie können Klassen erstellen, die die Schnittstelle implementieren, und dann Objekte aus diesen Klassen erstellen. Sie können dann Objekte der Klassen verwenden, die die Schnittstelle an einer beliebigen Stelle implementieren, an der die Schnittstelle erwartet wird.
In diesem Fall, wenn Sie eine Klasse haben BigObjectOutput
die ObjectOutput
wie so implementiert:
class BigObjectOutput implements ObjectOutput {
// code...
}
dann können Sie ein Objekt des Typs erstellen BigObjectOutput
wie folgt aus:
BigObjectOutput bigObject = new BigObjectOutput;
und geben es in Ihre Methode, weil BigObjectOutput
implementiert ObjectOutput
:
Warum möchten Sie das tun?
class LittleObjectOutput implements ObjectOutput {
// code...
}
LittleObjectOutput littleObject = new LittleObjectOutput();
writeOutput(littleObject);
So ist Ihr writeOutput
nützlicher, wenn es ein beliebiges Objekt übernimmt, deren Typ implementiert die OutputObject
Schnittstelle, als wenn es dauerte nur BigObjectOutput
s: Damit Sie in jedem Objekt, dessen Typ implementiert ObjectOutput
passieren kann.
ObjectOutput wird hier nicht erstellt. Es ist das Argument für die Methode und wird vom Aufrufer bereitgestellt. Und das Objekt kann vom Typ ObjectOutput sein, solange das bereitgestellte Objekt die Schnittstelle implementiert. – trappski