Обычно это решается с помощью композиции объектов .
. Это также рекомендуется в Effective Java, пункт 16: Композиция Favor over the Наследование .
Java ограничивает класс от наличия , являющегося -связью , до двух (не связанных) классов.Он не однако ограничивает класс от наличия функциональности двух не связанных между собой классов.
class A {
void doAStuff() {
System.out.println("A-method");
}
}
class B {
void doBStuff() {
System.out.println("B-method");
}
}
// Wraps an A and a B object.
class C {
A aObj;
B bObj;
void doAStuff() {
aObj.doAStuff();
}
void doBStuff() {
bObj.doBStuff();
}
}
(В качестве альтернативы вы могли быиметь class C extends A
и создавать только методы-оболочки для B
, но имейте в виду, что имеет смысл сказать, что C - это A .)
У меня есть шаблон проектирования, которому нужно следовать, и для этого его необходимо расширить
Это, как вы, наверное, знаете, совершенно невозможно.Однако вы можете создать прокси-классы для A
и B
, которые делегируют функциональность экземпляру C
.Например, добавив эти два метода к классу C
выше:
class C {
// ...
public A asAObject() {
return new A() {
@Override
void doAStuff() {
C.this.doAStuff();
}
};
}
public B asBObject() {
return new B() {
@Override
void doBStuff() {
C.this.doBStuff();
}
};
}
}