2010-07-17 68 views
0

上面的解釋非常好。關於super關鍵字的混淆;在Java中實現的裝飾模式

然而,我通過稍微修飾模式的執行(DEP)混淆在

http://www.netobjectives.com/resources/books/design-patterns-explained/java-code-examples/chapter17/#17-1

給出上面鏈接代碼的設計是在給定tinypic.com/view.php?pic= xnaqlt & s = 3

我很困惑「super.callTrailer();」在裝飾類Header1,Header2,Footer1和Footer2中,都是從TicketDecorator派生的。

不應該只是「callTrailer();」 ?由於「private Component myTrailer;」行,每個裝飾器對象都有自己對下一個裝飾器的引用。

注:我不是很熟悉Java和初學者設計模式。

+0

你看過http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/java/IandI/super.html嗎? – barrowc 2010-07-17 16:32:13

+0

謝謝,我已經通過了它,這是主要出現在搜索中的東西;即當派生類「覆蓋」該方法時,它用於訪問派生類中的父方法。這裏的派生類不會覆蓋它! – Imran 2010-07-17 17:05:48

回答

2

他們都會給你同樣的結果。由於callTrailer()僅存在於父類中,因此自己調用callTrailer()將自動調用TicketDecorator的callTrailer()。我想他們超級的原因是要明確說明它正在調用父母的方法。

+0

謝謝。 但是..如果一個類B從A派生而來,並且A有一個方法x()。 B沒有定義(覆蓋)x()。所以現在B也是一個可以訪問B的任何成員的方法x()。我的意思是x()是B的一個實例方法。 – Imran 2010-07-17 17:09:05

+0

@Imran - 如果沒有覆蓋,那麼如果你在B上調用x(),它將調用A上的那個。 – 2010-07-17 17:15:57

+0

ok。可以說x()修改一個私有成員「pv」。正如你所說的x()被稱爲是A.在哪個「pv」被修改? A中的「pv」或B中的「pv」? – Imran 2010-07-17 17:24:47