| Author |
Could somebody explain this to me?
|
Bob Sherry
Greenhorn
Joined: Jun 27, 2008
Posts: 20
|
|
Please consider the following Java Program: import java.io.*; class Player { Player() { System.out.println( "base called" ); } } public class CardPlayer extends Player implements Serializable { CardPlayer() { System.out.println( "dev called" ); } public static void main( String args[] ) { CardPlayer c1 = new CardPlayer(); try { FileOutputStream fos = new FileOutputStream( "play.txt" ); ObjectOutputStream os = new ObjectOutputStream( fos ); os.writeObject(c1); os.close(); FileInputStream fis = new FileInputStream( "play.txt" ); ObjectInputStream is = new ObjectInputStream( fis ); System.out.println( "before" ); CardPlayer c2 = (CardPlayer) is.readObject(); System.out.println( "after" ); is.close(); } catch ( Exception x ) { } } } When the object is read back off the disk, I would expect that there would be a call to the constructor for CardPlayer and a call to the constructor for Player. However, I am only getting the constructor call for Player. I am hoping that somebody can tell why this is. Thanks Bob ~ ~
|
 |
Ernest Friedman-Hill
author and iconoclast
Marshal
Joined: Jul 08, 2003
Posts: 24081
|
|
Hi Bob, Welcome to JavaRanch! Basically because Player is not serializable, and CardPlayer is. A Serializable instance is normally deserialized without calling its constructor. But if the base class isn't serializable, the serialization mechanism won't store its state; instead, the base part of the object will be initialized with a constructor call. If you mark Player as Serialized, you'll see that printout disappear.
|
[Jess in Action][AskingGoodQuestions]
|
 |
 |
|
|
subject: Could somebody explain this to me?
|
|
|