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.