В чем разница между различными переопределенными методами в Scala?

Scala позволяет переопределить метод двумя законными способами:

Данный супер класс:

class A {
  def a = "A"
}

Мы можем переопределить метод & quot; a & quot; от:

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

а также

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

оба, похоже, переопределяют метод "a" правильно. Какое дизайнерское решение стоит за этим? Зачем использовать & quot; a () & quot; в B, чтобы переопределить "a" в?