[Resolvido] - Construtor pode ser private?

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?

Até tem… através de outro método factory.

Essa técnica é usada nos singletons.

[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()