मुझे पता है कि जावा ऑब्जेक्ट कन्स्ट्रक्टर अपने उदाहरण के गैर स्थैतिक फ़ील्ड को स्पष्ट रूप से प्रारंभ करते हैं। हालांकि, मुझे इस आदेश के बारे में अनिश्चितता है कि यह कक्षा पदानुक्रम में होता है। उदाहरण के लिए:जावा कन्स्ट्रक्टर और फील्ड प्रारंभिकरण आदेश
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));
}
}
माता पिता के निर्माता कॉल बच्चे वर्ग है, जो List<Shape> bag
के मूल्य के रूप में एक अपवाद फेंकता में एक विधि वर्तमान में रिक्त है।
मैं एक बच्चे के कन्स्ट्रक्टर को परिभाषित कर सकता हूं और सुपर() को कॉल कर सकता हूं, लेकिन यह कन्स्ट्रक्टर बॉडी में पहली पंक्ति होनी चाहिए (जिसका मतलब है कि मुझे अभी भी getNextPiece
कहा जाता है) से पहले बैग शुरू करने का मौका नहीं है।
मुझे कुछ स्पष्ट याद आ रहा है।