Можно ли вызывать абстрактный метод из конструктора в Java? [Дубликат]
На этот вопрос уже есть ответ здесь:
Какие'не так с переопределенными вызовами методов в конструкторах? 7 ответовПозволять'Предположим, у меня есть абстрактный базовый класс, который реализует интерфейс 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();
}
А вот и один из немногих производных классов.
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);
}
}
Дело в том, что я хочу, чтобы мой Базовый класс делал некоторые общие вещи вместо того, чтобы копировать их каждый раз. На самом деле этоработает нормально, вывод всегда одинаковый:
Базовый конструктор Производный поток создан с параметром 1 Производный выполняется с параметром 1
Но безопасно ли в JAVA запускать поток, вызывающий абстрактный метод в конструкторе? Потому что, насколько я знаю, в C ++ и C # это небезопасно в большинстве случаев. Спасибо!