Há algum problema em chamar o método abstrato do construtor em Java? [duplicado]
Esta questão já tem uma resposta aqui:
O que há de errado com chamadas de método substituíveis em construtores? 7 respostasVamos supor que eu tenha uma classe básica abstrata que implemente a interface Runnable.
public abstract class Base implements Runnable {
protected int param;
public Base(final int param) {
System.out.println("Base constructor");
this.param = param;
// I'm using this param here
new Thread(this).start();
System.out.println("Derivative thread created with param " + param);
}
@Override
abstract public void run();
}
E aqui está uma das poucas classes derivadas.
public class Derivative extends Base {
public Derivative(final int param) {
super(param);
}
@Override
public void run() {
System.out.println("Derivative is running with param " + param);
}
public static void main(String[] args) {
Derivative thread = new Derivative(1);
}
}
O ponto é que eu quero que minha classe Base faça algumas coisas gerais em vez de copiá-lo todas as vezes. Na verdade, está funcionando bem, a saída é sempre a mesma:
Construtor base Derivative thread criado com param 1 Derivative is running with param 1
Mas é seguro IN JAVA iniciar um thread chamando o método abstrato no construtor? Porque, em C ++ e C #, é inseguro na maioria dos casos, tanto quanto eu sei. Obrigado!