簡體   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