super (arg) вызывает конструктор суперкласса, установка переменной просто устанавливает переменную. (Конструктор может содержать больше логики, чем просто присвоение переменной, которую вы обходите вторым способом)
Простой пример:
public class P{
protected String variable1;
private boolean variableInitialized = false;
public P (String s){
this.variable1 = s;
this.variableInitialized=true;
}
}
public class C extends P{
}
вызов super("x")
в пределах C
также установит логический флаг, так как родительский класс «может ожидать» его. Вызов super.variable1="x"
не повлияет на логический флаг, и вы не можете изменить его, потому что он является личным.
Как правило, я бы сказал: если для определенной переменной есть выделенный конструктор, его стоит использовать, если только вы не хотите переопределить эту реализацию.