2016-07-12 2 views
5

Скажем, я использую библиотеку форм, которые предложили:Продлить конкретный базовый класс иерархии

class Shape 
class Circle extends Shape 
class Square extends Shape 

, но я хочу ввести понятие красных фигур. Я не могу изменить библиотеку, но я могу создать:

class RedShape extends Shape 

однако это не может быть легко расширена до RedCircle, поскольку он не может распространяться как RedShape и Circle.

Я не думаю, что узор декоратора здесь работает, но есть ли способ достижения этого?

+0

Я думаю, что узор декоратора на самом деле является вашим лучшим выбором в этом случае, так как вы не можете иметь множественное наследование –

ответ

1

Короткий ответ можно найти в Effective java от Josh Bloch, Пункт 16: Композиция предпочтения над наследованием.


EDIT: Композиция, что вам нужно будет сделать, на самом деле. Multiple inheritance is not allowed with java. У людей есть tried. У них есть approaches. Это writing papers об этом. Они даже используют инструменты генерации кода или прокси (не прокси-сервер jdk в вашем случае, он не может сделать прокси класса), но ничто не столь элегантно, как вам бы хотелось.

+0

Возможно, это комментарий. В качестве альтернативы, вы можете дать нам некоторое представление об этом «коротком ответе» в дополнение к ссылке :) – Keiwan

+0

Я не думаю, что композиция является ответом в этом случае, поскольку «RedShape» все равно должен быть «Shape», например, так что я может 'draw (Shape)' it. – DrYap

+0

Ну, вы не можете _draw_ форму, если не знаете, что рисовать; другими словами, абстрактность формы фиксируется методом 'draw'. Поэтому я надеюсь, что эта гипотетическая библиотека делает 'Shape # draw'« абстрактным »методом. –

0

Определить интерфейс Colorable методами getColor и setColor и иметь цветные формы.

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