繁体   English   中英

Java。 定义方法时遇到麻烦

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM