2010-07-17 6 views
0

приведенное выше объяснение очень приятно.Путаница о супер ключевое слово; Decorator Pattern, реализованный в 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 и новичок в Design Patterns.

+0

Вы посмотрели http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/java/IandI/super.html? – barrowc

+0

Спасибо, я прошел через это, и это то, что было главным образом в поиске; то есть он используется для доступа к методу родителя в производном классе, когда производный класс «переопределяет» метод. Здесь производный класс не отменяет его! – Imran

ответ

2

Они оба дадут вам тот же результат. Поскольку callTrailer() существует только в родительском классе, то вызов callTrailer() сам будет автоматически вызывать callTrailer() TicketDecorator. Я думаю, причина, по которой они поставили супер, заключается в том, чтобы сделать его явным, что он вызывает метод родителя.

+0

Спасибо. Но .. Если класс B получен из A. И A имеет метод x(). B не определяет (переопределяет) x(). Итак, теперь B также метод x(), который может получить доступ к любым членам B. Правильно? Я имею в виду, что x() - это метод экземпляра B. – Imran

+0

@Imran - если нет переопределения, то Если вы назовете x() на B, он назовет тот на A. –

+0

ok. допустим, x() изменяет частный член «pv». А так как u говорят, что x() называется той, что в A. Какой «pv» модифицирован? «Pv» в A или «pv» в B? – Imran

Смежные вопросы