¿Cuál es la diferencia entre los diferentes métodos que prevalecen en Scala?

Scala le permite anular un método de dos maneras legales:

Dada súper clase:

class A {
  def a = "A"
}

Podemos anular el método "a" por:

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

y

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

Ambos parecen anular el método "a" correctamente. ¿Cuál es la decisión de diseño detrás de esto? ¿Por qué permitir que "a ()" en B anule "a" en A?

Respuestas a la pregunta(1)

Su respuesta a la pregunta