Java-Konstruktor und Feld-Initialisierung Um

Ich mir bewusst, dass Java-Objekt-Konstruktoren implizit initialisieren Ihrer Instanz nicht-statische Felder. Allerdings bin ich mir nicht sicher über die Reihenfolge, dass dies geschieht in einer Klassen-Hierarchie. Zum Beispiel:

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));
    }
}

Den übergeordneten Konstruktor ruft eine Methode in der child-Klasse, die eine exception wirft, als der Wert List<Shape> bag ist derzeit null.

Kann ich definieren, ein Kind-Konstruktor aufrufen super(), aber das muss die erste Zeile in den Konstruktor Körper (was bedeutet, dass ich nicht noch eine chance zu initialisieren Tasche vor getNextPiece genannt wird).

Bin ich etwas fehlt offensichtlich.

InformationsquelleAutor efritz | 2012-05-14
Schreibe einen Kommentar