Итак, я наивно написал абстрактный класс (игровая доска), содержащий поле без модификатора доступа для массива, используемого для хранения состояния игры (квадрат []). Этот класс имеет различные методы, реализованные с использованием этого Square []. У меня также есть два подкласса, наследуемых от этого класса, используя эти же методы из своего родительского класса.Java переписывание унаследованных методов
Теперь, по той или иной причине, я должен сделать свой квадрат [] закрытым. Я думал, что простое исправление было бы сделать геттер, как обычно,
Class Board {
...
/**An array contain all the Squares for my board. */
private Square[] squares;
public Square[] getSquares() {
return squares;
}
}
class MutableBoard extends Board {
/** An N x N board in initial configuration. */
MutableBoard(int N) {
_N = N;
squares = new Square[_N * _N];
for (int i = 0; i < squares.length; i++) {
squares[i] = new Square();
}
}
@Override
void copy(Board board) {
_N = board.size();
_moves = board.numMoves();
squares = new Square[board.getSquares().length]; //Errors here when used
for (int i = 0; i < squares.length; i++) {
squares[i] = board.squares[i].clone();
}
}
}
class ConstantBoard extends Board {
/** A new ConstantBoard that allows a read-only view of BOARD. */
ConstantBoard(Board board) {
_board = board;
squares = board.getSquares();
}
}
, но я получаю NULL указателя Исключения каждый раз, когда я пытаюсь получить доступ или изменить мой массив в моих подклассах, используя наследуемые методы. Я думаю, потому что мой квадрат [] определен в моем родительском классе, он пытается получить доступ к копиям массива, а не к подклассам. Кто-нибудь знает, как легко исправить это, что не включает в себя просто поместить все мои методы в оба подкласса (и победить всю точку наследования)?
Например, в моем методе копирования я хочу иметь возможность передавать как MutableBoard, так и Constant Board, но я думаю, что он пытается каким-то образом получить доступ к копии квадратов Board, которые даже не инициализированы.
Код, который вы указали, даже не компилируется, поэтому вы не получите исключение NullPointerException ... Если вы не разместили свой * действительный * код, мы не сможем вам помочь. –
Возвращаемый тип должен быть массивом квадратного «public Board [] getSquares()» – Prabhakaran
Если вы получаете ошибку с нулевым указателем, вы можете инициализировать объект при создании, иначе он просто вернет квадраты, содержащие нуль. – david99world