Java-Konstruktor und Feldinitialisierungsreihenfolge

Ich weiß, dass Java-Objektkonstruktoren die nicht statischen Felder ihrer Instanz implizit initialisieren. Ich bin mir jedoch nicht sicher, in welcher Reihenfolge dies in einer Klassenhierarchie geschieht. Beispielsweise

abstract public class AbstractPieceSequence implements PieceSequence
{
    private Tetromino current;
    private Tetromino preview;

    public AbstractPieceSequence()
    {
        advance();
    }

    @Override
    public final void advance()
    {
        if (preview == null) {
            current = getNextPiece();
            preview = getNextPiece();
        } else {
            current = preview;
            preview = getNextPiece();
        }
    }

    abstract protected Tetromino getNextPiece();
}
public class ShufflePieceSequence extends AbstractPieceSequence
{
    private List<Shape> bag = new LinkedList<Shape>();

    @Override
    protected Tetromino getNextPiece()
    {
        if (bag.size() == 0) {
            Collections.addAll(bag, Shape.I, Shape.J, Shape.L, Shape.O, Shape.S, Shape.T, Shape.Z);
        }

        return Tetromino.tetrominoes.get(bag.remove(0));
    }
}

Der Konstruktor des übergeordneten Elements ruft eine Methode in der untergeordneten Klasse auf, die eine Ausnahme als Wert von @ auslösList<Shape> bag ist derzeit null.

Ich kann einen untergeordneten Konstruktor definieren und super () aufrufen, aber das muss die erste Zeile im Konstruktorkörper sein (was bedeutet, dass ich noch keine Chance habe, bag vor @ zu initialisieregetNextPiece wird genannt)

Ich vermisse etwas Offensichtliches.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage