Можно ли вызывать абстрактный метод из конструктора в 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 # это небезопасно в большинстве случаев. Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос