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。
答案 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?