Qual é a diferença entre os diferentes métodos de substituição no Scala?

O Scala permite que você substitua um método de duas formas legais:

Dado super classe:

class A {
  def a = "A"
}

Podemos substituir o método "a" por:

class B extends A {
  override def a = "B"
}

e

class B extends A {
  override def a() = "B"
}

ambos parecem substituir o método "a" corretamente. Qual é a decisão de design por trás disso? Por que permitir "a ()" em B para anular "a" em A?

questionAnswers(1)

yourAnswerToTheQuestion