我想制作一个简单的继承实例,互联网上有很多关于该实例的信息,但我只是无法理解我的情况。
public abstract class Board {
private Block [][] board;
/**
* creates and empty board
*/
public Board(){
board = new Block[6][6];
//init board
for(int i = 0; i<board.length ...
}
public abstract place(int x, int y, int type);
public void otherFunction1();
etc..
还有我的 child 类(class)
public class StandartBoard extends Board{
public int place(int type, int x, int y) {
bord[i][j].something;
}
问题是,我想使用父类(super class)构造函数的初始化以及它的所有其他函数,但我希望 place 函数特定于 StandartBoard。我如何定义变量“board”,以便我可以使用和修改父类(super class)中的相同变量。
我知道一种方法是使用 set 和 gets,但是我不能使用 protected 或其他东西直接访问它......
最佳答案
如果您使用 protected
修饰符而不是 private
设置您的 board
,那么您可以像您建议的那样直接访问它。
正如您所说,另一种方法(不一定反射(reflect)正确的做法)是为其定义一个 getter
:
public Block[][] getBoard(){
return board;
}
关于您的评论,是的,protected
具有包范围的访问权限。没有仅子类修饰符。 Java本来就有这样的修饰符。它是私有(private)保护
,但在 Java 1.0 中被删除。
如果您想模仿这样的设计,您可以使用protected
修饰符并强制只有父类及其子类位于同一个包中。
关于java - Java中抽象类的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039266/