Почему не стоит вызывать методы в конструкторе?
На самом деле вызывать не стоит только виртуальные методы. Т.к. если класс наследник его переопределит, то возникнет ситуация, когда метод работает до вызова конструктора класса-наследника. И если в этом методе используются какие-нибудь поля класса-наследника, они могут быть еще непроинициализированы.
А так как в JavaIn Java, all non-static methods are by default "virtual functions." Only methods marked with the keyword final, which cannot be overridden, along with private methods, which are not inherited, are non-virtual.
то в конструкторе не стоит вызывать любые публичные не final методы.
Ниже C# код (т.к. работаю в основном с этим языком), иллюстрирующий это.void Main()
{
	new B("name");
}

class A
{
    public A()
	{
	     Method();
	}
	
	protected virtual void Method()
	{
	}
}

class B : A
{
    private string Property { get; set; }
	
	public B(string value)
	{
	    Property = value;
	}
	
    protected override void Method()
	{
	    Console.WriteLine(Property.Length);
	}
}
Результат: Object reference not set to an instance of an object.
StackTrace
   at UserQuery.B.Method()
   at UserQuery.A..ctor()
   at UserQuery.B..ctor(String value)
   at UserQuery.Main()
первая задача конструктора — перевести поля объекта в допустимое состояние.Вторая задача — упростить пользование объектом. 
Например конструктор класа для работы с файломFile file("in.txt", File::omRead);
И почему бы не вызывать какието дополнительныи методы для чтения с файла или валидации данных. И тому подобное.
Тока как сказали уже више виртуальныи методы вызывать нельзя.