aspose file tools
The moose likes Java in General and the fly likes Could somebody explain this to me? Big Moose Saloon
  Search | Java FAQ | Recent Topics
Register / Login


JavaRanch » Java Forums » Java » Java in General
Reply Bookmark "Could somebody explain this to me?" Watch "Could somebody explain this to me?" New topic
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
    
  15

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]
 
I agree. Here's the link: http://zeroturnaround.com/jrebel - it saves me about five hours per week
 
subject: Could somebody explain this to me?
 
Similar Threads
Serialization question
Deserializing
Best Practices for Serializing Subclass whose Superclass is NOT Serializable
About I/o Files
doubt based on construtor