trait Foo { @transient protected var load = 1 @transient protected var a = 12 protected def init[B](in: java.io.ObjectInputStream): Unit = { in.defaultReadObject load = in.readInt val sizea = in.readInt a = 12 } protected def serializeTo(out: java.io.ObjectOutputStream): Unit = { out.defaultWriteObject out.writeInt(load) out.writeInt(a) } } class Bar extends Foo with Serializable { @transient protected var first: Any = null def size = a @transient var second: Any = null def checkMember: Unit = { if (first == null) print("") } private def writeObject(out: java.io.ObjectOutputStream): Unit = { serializeTo(out) } private def readObject(in: java.io.ObjectInputStream): Unit = { first = null init(in) } } object Test { private def toObject[A](bytes: Array[Byte]): A = { val in = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bytes)) in.readObject.asInstanceOf[A] } private def toBytes(o: AnyRef): Array[Byte] = { val bos = new java.io.ByteArrayOutputStream val out = new java.io.ObjectOutputStream(bos) out.writeObject(o) out.close bos.toByteArray } def main(args: Array[String]): Unit = { val a1 = new Bar() val serialized:Array[Byte] = toBytes(a1) val deserialized: Bar = toObject(serialized) deserialized.size deserialized.checkMember } }