This is typically solved using object composition.
This is also advocated in Effective Java, Item 16: Favor composition over inheritance.
Java restricts a class from having an is a-relation to two (unrelated) classes. It does not however restrict a class from having the functionality of two unrelated classes.
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();
}
}
(Alternatively you could have class C extends A
and only create wrapper methods for B
, but keep in mind that it should make sense to say C is an A.)
I have a design pattern that need to be followed and for that its compulsory to extend
This is, as you probably know completely impossible. You could however create proxy classes for A
and B
that delegate the functionality to the C
-instance. For instance by adding these two methods to the C
-class above:
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();
}
};
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…