Às vezes, usar uma classe que contém apenas métodos estáticos e campos estáticos pode ser útil.
Como exemplo, podemos usar classes utilitárias como java.lang.Math e java.util.Arrays, que agrupam métodos relacionados a operações matemáticas e arrays. Ou podemos agrupar métodos estáticos de fábrica, como em java.util.Collections, que criam objetos que implementam uma determinada interface.
Essas classes utilitárias não precisam de variáveis ou métodos de instância para serem usadas, então não precisam de um construtor. No entanto, se um construtor não for declarado explicitamente, o compilador criará automaticamente um construtor público padrão. Como resultado, os usuários não podem diferenciar se o construtor foi gerado automaticamente.
Para evitar isso, às vezes as classes são definidas como abstratas. No entanto, classes abstratas não impedem a instanciação. Basta criar uma subclasse e instanciá-la.
Portanto, para impedir a instanciação de classes utilitárias, o modificador de acesso do construtor deve ser definido como private.
Se o modificador de acesso do construtor padrão for private, ele não será acessível de fora da classe. Além disso, uma exceção é lançada para evitar que o construtor padrão seja chamado internamente.
Esse construtor private pode ser difícil de entender para os usuários, então é uma boa prática adicionar comentários. Observe que tornar o construtor private também impede a herança.
Comentários0