Uma classe abstrata tem o intuito de criar uma classe com intenções no futuro, implementar métodos que não serão utilizados no momento, ou querer utiliza-la para extensões de classes, impossibilitando instancia-la diretamente.Pelo próprio nome diz ‘abstrato’. Não é uma classe concreta que pode ser instanciada.
Construtor private:
O java aceita você colocar private como acessibilidade privada ao construtor.
Por exemplo, um dos design patterns como singleton:
Um singleton é uma classe que pode ser instanciada uma única vez, como explicado no livro de Design Patterns da GoF. Normalmente representa um componente que é intrinsicamente único, como uma placa de vídeo ou o sistema de arquivos.
A forma de implementar um singleton é mantendo o construtor privado e provendo um membro estático público para retornar a instância, que pode ser diretamente um campo final da classe ou então um método que retorne essa instância. Ex.:
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() {
// construtor da classe
}
public static Elvis getInstance() {
return INSTANCE;
}
}
Para que o singleton seja serializável, também é necessário incluir um método readResolve que descarte a nova instância criada na desserialização, retornando aquela já existente.
Método construtor:
Retirado de http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=46
O que é um construtor padrão(default) ?
[a] O construtor é chamado sem argumentos.
[b] O construto padrão provido pelo compilador Java.
[c] Se você define um construtor numa classe então o construtor padrão não será fornecido.
Exemplo:
classe Base {
public Base() {}
public Base(String s){}
}
public class Derived extends Base{
public static void main(String args[]){
Derived d = new Derived("Hello"); //Compiler gives error here
}
}
Saída:
Derived.java:12: Wrong number of arguments in constructor.
Derived d = new Derived(“Hello”); //Compiler gives error here
^
Para fazer ele funcionar , defina um construtor e chame o construtor da classe base usando super() dentro do contrutor.
Exemplo:
class Base {
public Base() {}
public Base(int i) {}
}
public class Derived extends Base{
public static void main(String arg[]){
Derived m = new Derived(10);
}
Derived(int i) {
super(i);
System.out.println( "The i values i " + i );
}
}
Saída:
The i values i 10
Caso alguém ver algo de errado ao explicar, pode colaborar também…