这是我的类Mappa,它有mappaName作为构造函数的主要属性
public class Mappa {
private Name mappaName;
protected Settore [][] settore;
private int Matrice [][];
private static final int X=14;
private static final int Y=23;
public Mappa (Name mappaName){
this.mappaName=mappaName;
settore = new Settore[X][Y];
for (int i=0; i < X; i++){
for (int j=0; j<Y; j++) {
settore[i][j] = new Settore (i,j);
}
}
Matrice = new int[X][Y];
if(mappaName==Name.FERMI){
settore[8][10]=new Alieni(8,10);
settore[9][10]=new Umani(9,10);
}
if(mappaName==Name.GALILEI||mappaName==Name.GALVANI){
settore[5][10]=new Alieni(5,10);
settore[7][10]=new Umani(7,10);
}
}
}
这是子类MappaFermi,它只运行Mappa类的构造函数,将mappaName设置为Name.FERMI
public class MappaFermi extends Mappa {
public MappaFermi() {
super(null);
new Mappa(Name.FERMI);
}
new Mappa(Name.FERMI);
是不是应该将mappaName
设置为Name.FERMI
,因为if条件设置为settore[8][10]=new Alieni(8,10);
和settore[9][10]=new Umani(9,10);
?因为当我进行测试时,它返回null而不是预期的值。
public class MappaFermiTest {
@Test
public void testMappaFermiNome(){
Mappa mappa = new MappaFermi();
assertEquals(Name.FERMI, mappa.getMappaName());
}
@Test
public void testMappaFermiAlieni(){
Mappa mappa = new MappaFermi();
assertEquals(Nome.ALIENI, mappa.getSettori()[8][10].getSettoreNome());
}
}
答案 0 :(得分:1)
您似乎对new
关键字的作用有些误解。
new
调用构造函数并返回类的新实例。这意味着你的
public MappaFermi() {
super(null);
new Mappa(Name.FERMI);
}
实际上在调用Mappa
(这是实际的父构造函数调用)之后创建了一个新的super
对象,然后将其丢弃。
你真的想做
public MappaFermi() {
super(Name.FERMI);
}