如何创建抽象类数组



我有一个抽象类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问题。

解决方案:

  1. 删除抽象修饰符(如果没有使用抽象修饰符定义的方法,代码在这样做后可以正常工作)

  2. 创建其他类型,如public class MiddleCell extends Cell。代码table[i][j] = new MiddleCell();

注:如果它必须是一个抽象类,我建议重命名为AbstractCell

最新更新