По крайней мере, абстрактный класс должен иметь защищенный конструктор. Это не является строго необходимым, так как в любом случае невозможно использовать конструктор, но это делает контракт явным.
Другой вариант - сделать конструктор приватным. Это только хорошая идея, если все реализации класса являются закрытыми внутренними классами. Редкий, но полезный пример.