Я использую составные классы для группировки функций.
Но класс A (с композитом A1) получил наследование B (с композитом B1), и поведение, существующее в A1, будет адаптировано к B1, но окончательный a1 должен быть экземпляром B1 для этого.
Обь.: У меня есть способы, чтобы убедиться, что составная копия выполняется правильно (только ее составным партнером).
Невозможно назначить объект B1 для конечного поля a1:
class finalFieldTestFails{
class A1{
A1(A a){}
}
class A{
protected final A1 a1;
A(){
this.a1 = new A1(this);
}
A(A1 a1){
this.a1 = a1;
}
}
class B1 extends A1{
B1(B b){
super(b);
}
}
class B extends A{
//B(){ super.a1=new B1(this); } //FAIL: cant change final value
//B(){super(new B1(this));} //FAIL: cant use 'this' or 'super'
}
}
PS: ответ не должен включать рефлексивные трюки безопасности, если это возможно.