Alguém pode me ajudar nessa questão do JavaRanch…
Can a construcot be declared private?
Yes
So how do you make an object…? Obviously you’d need a less restritive method (say, public) which can be called to create and return a new object.
Obrigado
Alguém pode me ajudar nessa questão do JavaRanch…
Can a construcot be declared private?
Yes
So how do you make an object…? Obviously you’d need a less restritive method (say, public) which can be called to create and return a new object.
Obrigado
Sim, um construtor pode ser privado…
[code]public class Teste {
private Teste() {
}
}[/code]
Só que nesse caso vc não tem como instanciar a classe Teste (fora dela, claro…), a menos que você forneça uma maneira para isso (como um método public static)…
Depois pesquise sobre Singleton, talvez fique mais claro para você…
T+
Mas o construtor não deve ter mesmo nivel de acesso que a classe?
Digo… se a classe é public… o construtor não deve ser public?
[quote=guilherme.cq]Mas o construtor não deve ter mesmo nivel de acesso que a classe?
Digo… se a classe é public… o construtor não deve ser public?[/quote]
Por que? Onde você viu essa regra?
Sim, um construtor pode ser privado.
Então como você instancia um objeto daquela classe? Simples, por métodos estáticos!
Singleton é um pattern que usa desses recursos(e mais alguns) pra te retornar sempre a mesma instância de uma classe.
Mas cuidado pra não viciar em singletons e sair “gambiarrizando variáveis globais” por ai.
Pode sim.
Essa é uma técnica muito usada para criar classes que têm apenas métodos estáticos, para forçar a não criar nenhum objeto dessa classe.
class Math {
private Math() {}
public static double abs (double d) { if (d < 0) return -d; else return d; }
}
Você pode ter um construtor "auxiliar" que seja estático:
class Aluno {
private Aluno (String nome) { this.nome = nome; }
public Aluno (String nome, int idade) { this (nome); this.idade = idade; }
}
E você pode ter um método "factory" e deixar o construtor privado, para evitar o uso de "new".
Você pode fazer algo parecido com isso:
public class Classe {
private static final Classe INSTANCE = new Classe();
private Classe () {
}
public static final Classe getInstance() {
return INSTANCE;
}
}
[]´s
Daniel
Putz é, acho que bitolei numa ‘regra’ que li errado…
Obrigado pela resposta de todos.
Não, um construtor pode sim ter acesso mais restrito que a própria classe, senão o padrão Singleton por exemplo não poderia existir na linguagem java. você pode ter uma classe da seguinte forma:
public class Singleton {
private static Singleton unico;
public static Singleton getInstance() {
if (unico == null) {
unico = new Singleton();
return unico;
} else {
return unico;
}
}
private Singleton() {
}
}
Assim você pode garantir que apenas uma instancia desta classe exista;
Dica: Pesquise sobre padrões de projeto (Design Patterns);
é o tipo de duvida que vc pode abrir um notepad, criar um A.java, declarar um construtor private e compilar.
se compila é pq, em tese, pode. basta então entender a necessidade. O padrão Singleton é um exemplo. Factory pode ser outro. De qualquer forma vc quer restringir o new MinhaClasse()