That's a good question; I tested this on both Windows and Linux and the behavior was as you indicated on both platforms. I looked through the
Java language specification and it said that abstract methods can't be "private", "static" or "final", but it didn't say anything about "synchronized." However the Java VM spec did add "synchronized" and "strictfp" as forbidden modifiers on abstract methods.
My only guess is that since "synchronized" methods attempt to lock the instance, and abstract classes can't be instantiated, that there isn't any object to lock.
In terms of altering the signature, there are rules in terms of visibility (private/public/protected/[none]) and what exceptions it throws, but not in terms of "final" or "synchronized", since they don't affect the visibility of the method.
[ September 30, 2003: Message edited by: Wayne L Johnson ]