gpt4 book ai didi

Java重写继承的方法

转载 作者:行者123 更新时间:2023-12-02 06:32:08 24 4
gpt4 key购买 nike

所以我天真地编写了一个抽象类(游戏板),其中包含一个没有访问修饰符的字段,用于存储游戏状态的数组(Square[])。该类具有使用 Square[] 实现的各种方法。我还有两个子类,它们都继承自此类,并使用其父类中的相同方法。

现在,出于某种原因,我必须将我的 Square[] 设为私有(private)。我认为一个简单的修复方法就是像往常一样创建一个 getter 方法,

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

但每次尝试使用继承方法访问或修改子类中的数组时,我都会遇到空指针异常。我认为因为我的 Square[] 是在我的父类中定义的,所以它尝试访问 Board 的数组副本,而不是子类副本。有谁知道对此的简单解决方法,不涉及将我的所有方法放入两个子类中(并破坏整个继承点)?

例如,在我的复制方法中,我希望能够传入 MutableBoard 和 Constant Board,但我认为它试图以某种方式访问​​ Board 方 block 的副本,而该副本甚至没有初始化。

最佳答案

您应该返回Square[]

public Square[] getSquares() {
return squares;
}

squares[] 的类型为 Square,因此该方法应返回 Square[] 而不是 Board >

您还需要确保已初始化 squares[]

private Square[] squares = new Square[someSize];

for (int i = 0; i < suqares.length; i++){
squares[i] = new Square();
}

此外,在尝试在 MutableBoard 中初始化它之前,您还没有删除 _N

 _N = N;

public class MutableBoard extends Board {
int _N;

public MutablerBoard(int N){
_N = N;
}
}

-or-

public abstract class Board {
int _N;
}

same for _board

此外,您应该在 Boardpublic static 中创建 square[]。如果它是 private,则无法从 MutableBoard 修改它,并且无法从 ConstantBoard 访问 square 的“当前状态” 如果它不是静态

关于Java重写继承的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19974672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com