Переопределение метода с помощью объекта

Почему можно переопределить метод с пустыми скобками с помощью объекта?

trait A {
  def meth = {}
  def meth_p() = {}
}

class B extends A {
  object meth_p
} // compiles

Переопределение метода без скобок не компилируется:

class B1 extends A {
  object meth
} // does not compile

Не работает ни одна из следующих комбинаций (без модификатора override):

class BX extends A {
  // of course, each declaration should get its own class
  def meth = {}
  def meth_p() = {}
  def meth() = {}
  def meth_p = {}
  val meth = {}
  val meth_p = {}
  // ...
}

Это документированное и полезное поведение? Я только что столкнулся с очень тонкой ошибкой из-за этого случайного переопределения.

14
задан Debilski 28 September 2011 в 13:56
поделиться