composite-Vererbung: Wie wird ein letztes Feld beim Unterklassenkonstruktor zugewiesen, das von diesem Wert abhängt (Rückwärtsreferenz)?

Ich benutze zusammengesetzte Klassen, um Funktionalitäten zu gruppieren.
Aber die Klasse A (mit zusammengesetztem A1) wurde von B (mit zusammengesetztem B1) geerbt, und ein Verhalten, das an A1 vorhanden ist, wird an B1 angepasst, aber das letzte a1 muss eine B1-Instanz sein, damit dies funktioniert.

Obs .: Ich habe Möglichkeiten um sicherzustellen, dass die zusammengesetzte Instanziierung ordnungsgemäß ausgeführt wird (nur von ihrem zusammengesetzten Partner).

Ein B1-Objekt kann nicht einem 1-Endfeld zugewiesen werden:

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 .: Die Antwort sollte nach Möglichkeit keine Reflexionssicherheitstricks beinhalten.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage