методы переопределения scala в дочернем объекте класса - PullRequest
2 голосов
/ 12 ноября 2009

плохо знаком с scala и, похоже, не может найти ссылку на эту ситуацию.

Я пытаюсь переопределить некоторые методы в scala.swing.TabbedPane.pages: Определение этого класса:

class TabbedPane extends Component with Publisher {
   object pages extends BufferWrapper[Page] {
        def += 
   }
}

Я не могу понять синтаксис для переопределения любого метода во внутреннем объекте страниц. Возможно ли это с помощью scala?

Спасибо.

РЕДАКТИРОВАТЬ: Чтобы прояснить этот вопрос.

class CloseableTabbedPane extends TabbedPane{

}

val pane = new CloseableTabbedPane;
pane.pages += new CloseablePage;

Мне нужно переопределить метод pane.pages + =, чтобы принять CloseablePage со значком.

1 Ответ

1 голос
/ 12 ноября 2009

В обычном случае переопределения метода в классе:

scala> class Foo { def foo : String = "Foo" }
defined class Foo

scala> class Bar extends Foo { override def foo : String = "Bar" }
defined class Bar

scala> val b = new Bar
b: Bar = Bar@1d2bb9f

scala> b.foo
res0: String = Bar

Однако вы спросили, можно ли переопределить объект:

scala> class FooBar {
 | object prop extends Foo {
 |   def foo2 : String = "foo2"
 | }
 | }
defined class FooBar

scala> val fb = new FooBar
fb: FooBar = FooBar@183d59c

scala> fb.prop.foo
res1: String = Foo

Теперь для переопределения:

scala> fb.prop.foo2
res2: String = foo2

scala> class FooBaz extends FooBar {
 | override object prop extends Bar {
 | def foo2 : String = "bar2"
 | }
 | }
<console>:8: error: overriding object prop in class FooBar of type object FooBaz.this.prop;
 object prop cannot be used here - classes and objects cannot be overridden
   override object prop extends Bar {
                   ^

Это на самом деле не имеет смысла, как вы можете гарантировать, что переопределенное значение также расширит Foo?

...