我有一个抽象类Cell:
public abstract class Cell{...}
我也有其他类,如:
public class BigCell extends Cell{...}
和
public class SmallCell extends Cell{...}
我想创建一个数组(10x10)它的对角线(I =j)单元格是Cell类的,对角线的上类型是BigCell下类型是SmallCell我写了这段代码,但这是错误的因为我不能创建对角线(I =j)因为它的类型是Cell:
public void initializeTable(){
for(int i = 0; i < length; i++){
for(int j = 0; j < length; j++){
if(i == j){
table[i][j] = new Cell();
}else if(i > j){
table[i][j] = new SmallCell();
}else{
table[i][j] = new BigCell();
}
}
}
}
如何创建表?
抽象类不能用new
实例化。这就是abstract
关键字的全部意义。官方Java教程如下:
抽象类是一个被声明为抽象的类——它可以包含也可以不包含抽象方法。抽象类不能被实例化,但可以被子类化。
当你想创建一个类的实例,而这个实例恰好是这个类,而不是它的子类,那么不要将它声明为抽象。
当您出于某种原因想要保留Cell
类抽象时,您可以创建一个额外的class SimpleCell extends Cell
(或另一个适当的名称),并使用它来表示表中的对角线。
public abstract class Cell{...}
不能有自己的实例,因为abstract
修饰符。当你写public abstract class MyClass
的时候,你告诉你,你正在创建一个类型,它将被其他类扩展,但是Cell
的纯对象是不允许的。关于它的更多信息,请参阅另一个StackOverflow问题。
解决方案:
-
删除抽象修饰符(如果没有使用抽象修饰符定义的方法,代码在这样做后可以正常工作)
-
创建其他类型,如
public class MiddleCell extends Cell
。代码table[i][j] = new MiddleCell();
注:如果它必须是一个抽象类,我建议重命名为AbstractCell