The reason is that 1.4.2 by default targets version 1.2 and above. Where as 1.3 and all ones before it defaulted to 1.1.
As of J2SE 1.4.0, the javac bytecode compiler uses "-target 1.2" by default as opposed to the previous "-target 1.1" behavior. See the reference page for the javac compiler for descriptions of these behaviors. One of the changes involved in targeting 1.2 is that the compiler no longer generates and inserts method declarations into class files when the class inherits unimplemented methods from interfaces. These inserted methods, like all other non-private methods, are included in the default serialVersionUID computation. As a result, if you define an abstract serializable class which directly implements an interface but does not implement one or more of its methods, then its default serialVersionUID value will vary depending on whether it is compiled with the J2SE 1.4 version of javac or a previous javac.
For background information on these methods inserted by earlier versions of javac, see bug
By default, version 1.4 of the development kit generates class files for version 1.2 of the Java Virtual Machine, while earlier versions of the development kit generated class files for JVM version 1.1. As of this writing, the preverify utility expects version 1.1 class files, so it fails when you give it version 1.2 files generated by the newer development kit. To solve this problem, simply use javac's -target flag to have it generate version 1.1 class files: