Code tidyups without any functionality change: * Added constructors; it is cleaner for an abstract class to initialise its own members than require its subclasses to initialise them. * Made protected strings member final. Theoretically this is a "breaking API change". However only a complete nutter would ever write a class that would modify this member; the results would be very odd!