[英]Java. Trouble defining a method
我有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()方法,当我像这样直接在类内部编写时,没有问题
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()方法中写入它时,得到警告“未使用局部变量的值”,并且在子类MappaFermiCreator()的方法MappaFermiCreator()中出现错误“ mappa无法解析或不是字段”
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
}
}
MappaCreator
或其子类MappaFermiCreator
都没有实例变量mappa
因此无法编译。 将此添加到超类MappaCreator
protected Mappa mappa;
或将其添加到MappaFermiCreator
private Mappa mappa;
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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.