Java 如何创建抽象类数组

Java 如何创建抽象类数组,java,arrays,abstract-class,Java,Arrays,Abstract Class,我有一个抽象类单元格: public abstract class Cell{...} 我还必须参加其他课程,如: public class BigCell extends Cell{...} 及 我想创建一个数组10x10,它在单元格类的对角=j单元格中,对角类型的BigCell单元格和对角类型的SmallCell单元格中,我写了这段代码,但是错了,因为我不能创建对角=j,因为它是类型Cell: public void initializeTable(){ for(int

我有一个抽象类单元格:

public abstract class Cell{...}
我还必须参加其他课程,如:

public class BigCell extends Cell{...}

我想创建一个数组10x10,它在单元格类的对角=j单元格中,对角类型的BigCell单元格和对角类型的SmallCell单元格中,我写了这段代码,但是错了,因为我不能创建对角=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实例化抽象类。这就是抽象关键词的全部要点。内容如下:

抽象类是一个声明为抽象的类,它可能包含也可能不包含抽象方法。抽象类不能实例化,但可以子类化

当您想要创建一个类的实例,而该实例正是该类而不是它的任何子类时,请不要将其声明为抽象类

如果出于某种原因希望保持单元格类的抽象性,可以创建一个附加类SimpleCell extends Cell或另一个适当的名称,并使用它来表示表中的对角线。

公共抽象类Cell{…}不能有自己的实例,因为存在抽象修饰符。当您编写公共抽象类MyClass时,您告诉我们,您正在创建一个类型,该类型将被其他类扩展,但不允许使用纯Cell对象。更多关于它

解决方案:

若并没有使用抽象修饰符定义的方法,那个么删除抽象修饰符代码在执行此操作后立即工作

创建其他类型,如公共类MiddleCell扩展单元。在代码表[i][j]中=新的中间单元


另外,如果它必须是一个抽象类,我建议将其重命名为AbstractCell

Cell[]]table=。。。。另外,新单元不会编译,因为单元是抽象的。只是不要让Cell成为一个抽象类。如果你想创建Cell的实例,它显然不应该是抽象的…你的主题是,如何创建数组。。。但您的代码示例不会创建数组。在调用initializeTable之前,数组必须已经存在。initializeTable方法试图用对新单元格对象的引用填充数组,但正如Philip已经提到的,不允许使用新单元格,因为抽象就是这个意思。这意味着,该类定义不完整:您可以实例化其子类,但不能实例化该类本身。您应该阅读有关继承和抽象类的内容。是的,我有一个表专用单元格表[]。因此,如果我删除创建对角线的ifi=j{…},我的函数应该是正确的?解决方案3:新单元{/*implementabstract*/}是正确的;然而,在这个问题上,我认为最好使用1或2。
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();
                }
        }
    }
}