Constructors can indeed have public, protected, or private access modifiers. Public constructors allow instantiation from anywhere, protected from subclasses and same package, and private restricts instantiation (used in singleton pattern). The default constructor's access matches the class's access modifier.