Übergeordneter Klassenkonstruktor

8
%Vor%

Ausgabe dieses Codes ist - Parent Child Parent.

Die erste Menge Parent Child wird aufgerufen, weil der Zero-Argument-Konstruktor aufgerufen wird. oin.readObject () gibt ein untergeordnetes Objekt zurück. Dann warum nur der Konstruktor der Elternklasse aufgerufen wird und warum nicht die Kindklasse

    
Trishita 17.08.2015, 10:12
quelle

2 Antworten

2

Der Elternkonstruktor wird aufgerufen, da er nicht serialisierbar ist. Das Kind jedoch implementiert Serializable, es wird nicht aufgerufen.

    
Peter Lawrey 17.08.2015 10:16
quelle
1

Zitat aus Die Java-Dokumente für Serializable :

  

Damit Subtypen nicht serialisierbarer Klassen serialisiert werden können, übernimmt der Untertyp möglicherweise die Verantwortung für das Speichern und Wiederherstellen des Status der öffentlichen, geschützten und (falls verfügbar) Paketfelder des übergeordneten Typs. Der Subtyp kann diese Verantwortung nur übernehmen, wenn die Klasse, auf die er erweitert wird, über einen barrierefreien Konstruktor verfügt, um den Klassenstatus zu initialisieren. Es ist ein Fehler, eine Klasse Serializable zu deklarieren, wenn dies nicht der Fall ist. Der Fehler wird zur Laufzeit erkannt.

     

Während der Deserialisierung werden die Felder nicht serialisierbarer Klassen mit dem öffentlichen oder geschützten Konstruktor der Klasse no-arg initialisiert. Auf die Unterklasse, die serialisierbar ist, muss ein No-Arg-Konstruktor zugreifbar sein. Die Felder der serialisierbaren Subklassen werden aus dem Stream wiederhergestellt.

Die Serializable-Klassen selbst benötigen keinen args-Konstruktor und werden nicht zur Initialisierung verwendet, wenn sie existiert.

    
Hulk 17.08.2015 13:49
quelle

Tags und Links