如何创建抽象类数组

时间:2014-06-04 14:48:36

标签: java arrays abstract-class

我有一个抽象类Cell:

public abstract class Cell{...}

我还需要其他课程,如:

public class BigCell extends Cell{...}

public class SmallCell extends Cell{...}

我想创建一个数组(10x10),它在Cell类的对角线(i = j)单元格中,对角线类型BigCell单元格以及我编写此代码的SmallCell单元格,但是错误因为我可以&# 39; t创建对角线(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();
                }
        }
    }
}

如何创建表格?

2 个答案:

答案 0 :(得分:1)

无法使用new实例化抽象类。这是abstract关键字的重点。 The official Java tutorial读到:

  

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

如果要创建一个类的实例,而该类的实例正是该类而不是它的子类,则不要将其声明为抽象。

如果您希望出于某种原因保留Cell类摘要,可以创建一个额外的class SimpleCell extends Cell(或其他适当的名称),并使用它来表示表格中的对角线。

答案 1 :(得分:1)

由于public abstract class Cell{...}修饰符,

abstract无法拥有自己的实例。当您编写public abstract class MyClass时,您正在告诉您正在创建一个类型,该类型将由其他类扩展,但不允许使用Cell的纯对象。关于它的更多信息in this other StackOverflow question

解决方案:

  1. 删除abstract修饰符(如果没有使用abstract修饰符定义方法,代码在执行之后就可以正常工作)。

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

  3. P.S。如果必须是抽象类,我建议将其重命名为AbstractCell