我有一个抽象类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();
}
}
}
}
如何创建表格?
答案 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。
解决方案:
删除abstract修饰符(如果没有使用abstract修饰符定义方法,代码在执行之后就可以正常工作)。
创建其他类型的public class MiddleCell extends Cell
。并在代码table[i][j] = new MiddleCell();
P.S。如果必须是抽象类,我建议将其重命名为AbstractCell