Java中抽象类的继承
我想做一个简单的继承实例,在互联网上有很多关于它的信息,但在我的例子中我就是无法理解Java中抽象类的继承,java,inheritance,polymorphism,abstract-class,abstract,Java,Inheritance,Polymorphism,Abstract Class,Abstract,我想做一个简单的继承实例,在互联网上有很多关于它的信息,但在我的例子中我就是无法理解 public abstract class Board { private Block [][] board; /** * creates and empty board */ public Board(){ board = new Block[6][6]; //init board
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..
问题是,我想使用来自超类构造函数的初始化,以及它的所有其他函数,但我想让place函数特定于StandartBoard。我应该如何定义变量“board”,这样我就可以使用和修改来自超类的相同变量
我知道一种方法是使用set和get,但我不能直接使用protected或其他方法访问它 如果您使用
受保护
修饰符而不是私有
设置板
,那么您可以直接访问它,就像您建议的那样。
另一种方法(不一定反映正确的实践),也如您所述,是为它定义一个getter
:
public Block[][] getBoard(){
return board;
}
关于您的评论,是的,protected
具有包范围的访问权限。没有子类,只有修饰符。Java最初有这样一个修饰符。它是受私有保护的,但在Java 1.0中被删除了
如果您希望模拟这种设计,您可以使用
受保护的
修饰符,并强制规定只有父类及其子类在同一个包中。如果您使用受保护的
修饰符而不是私有的
设置板
,那么您可以直接访问它,就像您建议的那样。
另一种方法(不一定反映正确的实践),也如您所述,是为它定义一个getter
:
public Block[][] getBoard(){
return board;
}
关于您的评论,是的,protected
具有包范围的访问权限。没有子类,只有修饰符。Java最初有这样一个修饰符。它是受私有保护的,但在Java 1.0中被删除了
如果希望模拟这种设计,可以使用
protected
修饰符,并强制要求只有父类及其子类在同一个包中。您已经正确地从Oracle读取了该表
protected
意味着可以从同一包中的任何类(即使不是子类)和不同包中的子类访问该字段。这可能不是您想要的-默认访问(无修改器)可能比使用protected
更可取
没有修饰符意味着只有子类可以访问它
您最好保持线路板
私有
,并确保所有更改线路板的方法都将线路板保持在一致状态。由于数组是可变的,因此可以为单个条目而不是整个数组提供public
getter
public Block getBlockAt(int i, int j) {
return board[i][j];
}
这样,您就可以从任何地方读取线路板,而无需从任何地方更改线路板。您已经正确地从Oracle读取了该表
protected
意味着可以从同一包中的任何类(即使不是子类)和不同包中的子类访问该字段。这可能不是您想要的-默认访问(无修改器)可能比使用protected
更可取
没有修饰符意味着只有子类可以访问它
您最好保持线路板
私有
,并确保所有更改线路板的方法都将线路板保持在一致状态。由于数组是可变的,因此可以为单个条目而不是整个数组提供public
getter
public Block getBlockAt(int i, int j) {
return board[i][j];
}
这样,您就可以从任何地方读取线路板,而无需从任何地方更改线路板。
“我不能用受保护的设备直接访问线路板”
-是。你试过这么做吗?你的示例代码中可能有输入错误<在'bord[i][j]中的code>bord。某物;`应该是board
?是的,我读过:)我读到有了protected,每个人都可以访问它(不仅是子类,还有包中的所有类)。还是我对oracle的表格理解错了?我想要这种类型的访问,所以只有这个子类能够修改它。“我不能用protected直接访问它”
-是。你试过这么做吗?你的示例代码中可能有输入错误<在'bord[i][j]中的code>bord。某物;`应该是board
?是的,我读过:)我读到有了protected,每个人都可以访问它(不仅是子类,还有包中的所有类)。还是我对oracle的表格理解错了?我想要这种类型的访问,所以只有这个子类能够修改它。在这种情况下,我不会在数组上使用公共getter,因为它公开了数组引用,现在,您的Board
类不能再保证Board
对象处于有效状态,因为任何可以读取该Board的人现在都可以修改Board中的任何元素。将board
设置为protected
是将其公开给子类的最佳方式。在括号中添加了一条关于此的注释protected意味着只有子类可以访问它,而没有其他类可以访问它?(不是包中的其他类等)@Mladia我扩展了我的答案,以解决在这种情况下issueI不会在数组上使用公共getter的问题,因为它公开了数组引用,现在,您的Board
类不能再保证Board
对象处于有效状态,因为任何可以读取该Board的人现在都可以修改Board中的任何元素。将board
设置为protected
是将其公开给子类的最佳方式。在括号中添加了一条关于此的注释protected意味着只有子类可以访问它,而没有其他类可以访问它?(不是包中的其他类等)@Mladia我扩展了我的答案来解决这个问题