é verdade, vc pode ter qualquer modificador de tipo em um construtor: private, public, protected ou default (package = sem modificador)
outras coisas que vi no head first da kathy: (pode ajudar alguem que for prestar certificação pra programmer)
[list]Se você não declarar explicitamente um construtor o compilador irá criar um default sem parâmetros[/list]
[list]Se você declarar explicitamente um construtor o construtor no-arg não será criado, ou seja, se na minha classe Banana eu declarar Banana(int param) o construtor Banana() NÃO será criado[/list]
[list]Todo construtor deve ter na primeira linha uma chamada para o construtor default this() ou para o construtor da super-classe super()[/list]
[list]Se você não colocar nada o compilador irá automaticamente colocar uma chamada para o construtor da super-classe usando super() - construtor no-arg da super-classe[/list]
[list]Você pode declarar o seu próprio construtor no-arg[/list]
[list]Você não pode chamar um método ou acessar uma variável de instância até que o construtor da super-classe seja executado[/list]
[list]Você pode acessar variáveis estáticas e métodos como parte da chamada do this() ou super(). Por exemplo: super(Animal.fazAlgumaCoisa())[/list]
[list]Classes abstratas possuem construtores e esses são sempre chamados quando a subclasse que as implementa é instanciada[/list]
[list]Interfaces NÃO tem construtores, elas não fazem parte da herança, ou seja, classes de heranças diferentes podem implementar a mesma interface[/list]
[list]Um construtor só pode ser invocado dentro de outro construtor, é ilegal fazer o seguinte:[/list]
classe Cavalo {
Cavalo(); // construtor
void fazAlgo() {
Cavalo(); // chamando o construtor dentro do método
}
}