You'd never want to create an instance and I can't think why you should have to be able to extend it.
Is there a good reason why they aren't allowed in combination, other than "it's not very OO"?
If you really must create a class with static methods that you never want instantiated, have its constructor throw an exception. Make sure it's a runtime exception, and make sure it's your own exception, something like CompleteWeirdoException.
I will leave it to you to come up with a reason why you would worry about someone instantiating something that had no instance methods or variables.
A class that's not intended to be instantiated, but instead supplies static methods, is more of a "utility" class. (See Wikipedia - Utility Pattern.)
Luigi Plinge wrote:OK, it seems to be a slight misunderstanding on my part of what an abstract class is supposed to be. If you don't want a class to be instantiated just make the constructor private. Only mark the class abstract if it's a template to be extended, rather than because you don't want it to be instantiated.
That's exactly right!