Наследование с помощью Scala 'object' - PullRequest
7 голосов
/ 06 июня 2011

У меня есть этот Java-код:

class Super {
    public static void foo() { bar(); }
    public static void bar() { out.println("BAR");}

    public static void main(String[] args) {
        foo();
    }
}
class Sub extends Super {
    public static void bar() { out.println("bar"); }
}

И я хотел бы посмотреть, что он делает в Scala, но не могу найти, как написать эквивалент.Вот что у меня есть:

object Super  {
  def foo() { bar() }
  def bar() { println("BAR")}
  def main( args : Array[String]) {
    foo()
  }
}
object Sub extends Super {
  override def bar() { println("bar")}
}

Но не компилируется.Это потому что объект не может наследовать?

Ответы [ 2 ]

11 голосов
/ 06 июня 2011

Возможно, вы захотите изменить его на что-то вроде этого

class Super {
  def foo() { bar() }
  def bar() { println("BAR")}
  def main( args : Array[String]) {
    foo()
  }
}

object Super extends Super {
}

object Sub extends Super {
  override def bar() { println("bar")}
}

Таким образом, у вас есть тип Super и объект Super.

РЕДАКТИРОВАТЬ: только что переместил основной метод в класс Super, чтобы он стал чище.

3 голосов
/ 06 июня 2011

Вы можете продолжить только с классов.Поэтому вы можете изменить Super на class вместо object

Кроме того, вам необходимо добавить ключевое слово override в метод, который вы планируете переопределить.

См. «Переопределение метода» здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...