scala覆盖类的子对象中的方法

时间:2009-11-12 13:52:49

标签: swing scala

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 个答案:

答案 0 :(得分:1)

在覆盖类中方法的正常情况下:

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?