2009-11-12 53 views
2

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。

+0

是的 - 這只是我在考慮Swing實現的那種東西 - 它不完整;你必須修補現有的類以允許'Page'具有一個已定義的圖標並使用它。 – 2009-11-12 15:39:37

+0

您是否嘗試將override關鍵字放在def對象頁面的前面? – 2009-11-12 16:31:55

回答

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 = [email protected] 

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 = [email protected] 

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 { 
       ^

它沒有任何意義,因爲你如何確保被覆蓋的值als o擴展Foo?

+0

重寫一個普通的類方法並不是問題所在,如果我沒有更清楚地表示抱歉。它覆蓋存在於TabbedPane類內的對象「頁面」內的方法。 – justin 2009-11-12 15:25:40

+0

現在更改了答案 – 2009-11-12 15:34:56

+0

嗯,我同意它沒有意義,但我想知道爲什麼有人會這樣做一個API,因爲它很難覆蓋功能。也許有一種更簡單的方法來做我想要完成的事情? – justin 2009-11-12 15:37:26