ontem fui instanciar uma classe chamada StringUtils (acho que é isso) quando fui instancia (new StringUtils() ) foi apresentado uma mensagem dizendo que a classe não poderia ser instanciada, após importar no projeto, já poderia usar os métodos tipo:
StringUtils.método1();
StringUtils.método2();
O que seriam essas classes que não precisam ser instanciadas?
Alguém poderia postar um exemplo de uma classe assim?
São as classes que não possuem construtor público ou classes que apenas possuem métodos estáticos.
Já vi alguns textos que dizem que o ideal é não criar classes com construtores público e sim criar métodos estáticos do tipo NomeDeSuaClasse.getInstance();
Todas classes que sao “Final”, não podem ser extendidas, este e o objetivo de “Final”
Por isso você recebeu a mensagem do compilador, que a classe nao poderia ser extendida.
Agora uma classe que possui membros estaticos, a classe pode ser extendida, instanciada normalmente, porem nao e necessario criar um objeto da classe para acessar um membro estatico, pois o membro estatico e da classe.
[quote=evandro.santos]São as classes que não possuem construtor público ou classes que apenas possuem métodos estáticos.
Já vi alguns textos que dizem que o ideal é não criar classes com construtores público e sim criar métodos estáticos do tipo NomeDeSuaClasse.getInstance();[/quote]
Depende mano, tem classes que devem ser instânciadas,
e outras que não ou devem ter o construtor privado, depende da circustância…
tipo, se vc necessita de realizar um singleton, vc vai ter que colocar o construtor privado ou protegido, entende?
Evandro fiquei curioso, você teria algum exemplo da classe com o método do tipo NomeDeSuaClasse.getInstance(); [/quote]
Se você fizer algumas buscas encontrará um padrão chamado Singleton.
Tome cuidado, esse Design Pattern na maioria das vezes se torna um Anti-Pattern.
Antes de se aventurar por essas bandas de patterns sugiro que estude mais modificadores de acesso, variáveis/métodos estáticos, etc…
[code]
public final class Math {
private Math() {}
public static int sum(int a, int b) {
return a+b;
}
//Mais métodos estáticos aqui
}[/code]
Observe que o final impede a classe de ser herdada. O construtor privado vazio, sendo o único, impede a classe de ser instanciada. E os métodos estáticos não exigem objetos para serem usados.