我有Mappa类,它有一个同名的方法,可以创建两个矩阵
package mappa.product;
import mappa.Settore;
public class Mappa {
private Name mappaName;
private final Settore [][] settore;
private int Matrice [][];
private static final int X=23;
private static final int Y=14;
public Mappa (){
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[23][14];
}
public int[][] getMatrice() {
return Matrice;
}
public void setMatrice(int matrice[][]) {
Matrice = matrice;
}
public Name getMappaName() {
return mappaName;
}
public void setMappaName(Name mappaName) {
this.mappaName = mappaName;
}
public Settore[][] getSettori(){
return settore;
}
public void addSettori(){
Settore.add(settore);
}
}
然后我有MappaCreator类(在另一个包中),这个类的主要功能是回忆Mappa类的方法mappa(),当我直接在类中写入这样没有问题时< / p>
package mappa.creator;
import mappa.product.*;
public class MappaCreator {
Mappa mappa = new Mappa();
public MappaCreator(){
}
}
package mappa.creator;
import mappa.product.*;
public class MappaFermiCreator extends MappaCreator {
public MappaFermiCreator() {
Mappa mappa = new MappaFermi();
this.mappa=mappa;
}
}
但是当我在方法MappaCreator()中写入它时,我得到警告&#34;未使用局部变量的值&#34;并且错误&#34; mappa无法解析或不是字段&#34;在子类MappaFermiCreator的MappaFermiCreator()方法中
package mappa.creator;
import mappa.product.*;
public class MappaCreator {
public MappaCreator(){
Mappa mappa = new Mappa();//The value of the local variable is not used
}
}
package mappa.creator;
import mappa.product.*;
public class MappaFermiCreator extends MappaCreator {
public MappaFermiCreator() {
Mappa mappa = new MappaFermi();
this.mappa=mappa;//mappa cannot be resolved or is not a field
}
}
答案 0 :(得分:0)
MappaCreator
及其子类MappaFermiCreator
都没有实例变量mappa
,因此它不会编译。将其添加到超类MappaCreator
protected Mappa mappa;
或将其添加到MappaFermiCreator
private Mappa mappa;
答案 1 :(得分:0)
public MappaCreator(){
Mappa mappa = new Mappa();//The value of the local variable is not used
}
mappa
是此方法中的局部变量(构造函数),因为这是唯一的行,所以从不使用变量
public MappaFermiCreator() {
Mappa mappa = new MappaFermi();
this.mappa=mappa;//mappa cannot be resolved or is not a field
}
this.mappa
永远不会被宣布,因此无法解决。
您不应该在子类中复制超类的逻辑。避免这种情况的一种方法是使用super()
来使用超类中定义的功能。
public class MappaCreator
{
private Mappa mappa;
public MappaCreator(Mappa mappa)
{
this.mappa = mappa;
}
public MappaCreator()
{
this(new Mappa());
}
}
public class MappaFermiCreator extends MappaCreator
{
public MappaFermiCreator()
{
super(new MappaFermi());
}
}
这假定为MappaFermi extends Mappa
。