Java的。无法定义方法

时间:2015-05-18 16:08:02

标签: java methods import package subclass

我有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
    }


}

2 个答案:

答案 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