Если A, B, C имеют общие свойства, они могут совместно использовать интерфейс с геттерами для этих свойств. Если у вас есть такой интерфейс, скажем
interface CommonInterface {
Object getMyProperty()
}
class B extends CommonInterface {
[....]
}
class A extends CommonInterface {
private CommonInterface B myBInstance;
[....]
}
На данный момент вы можете использовать шаблон ChainOfResposibility: реализовать абстрактный класс как
abstract class CommonProperties implements CommonInterface {
protected CommonProperties successor;
public void setSuccessor(PurchasePower successor) {
this.successor = successor;
}
public Object processRequest(YourRequestClass request){
// Obviosuly here you can put the condition you need not necessarily "!= null"
if (request.getMyProperty() != null) {
return getMyProperty();
// else the request goes to the linked class
} else if (successor != null) {
successor.processRequest(request);
}
где сейчас
class B extends CommonProperties {
[....]
}
class A extends CommonProperties {
private CommonProperties B successors;
[....]
}