I'd say package private if possible. I like having abstract ctor the same visibility we would give to their implementations (it also makes intelliJ create the ctor with the same visibility automatically :p)