Java的。调用子类的方法

时间:2015-05-21 15:50:34

标签: java methods subclass

我有方法Mappa()创建数组沉降(使用Settore类的方法Settore()的坐标)和数字矩阵Matrice。 Settore类有几个子类(我使用子类Sicuro来解释代码),它从枚举Nome中为一组特定的坐标设置属性SettoreNome。我正在创建方法MappaCreator(),它根据Matrice [x] [y]的值指定每个Settore(x,y)的SettoreNome,似乎我没有正确调用方法因为我得到的错误是该方法未定义为子类Sicuro。

    package mappa;


    public class Settore {
            private Nome settoreNome;
            private char letteraX;
            private final int coordinataX;
            private final int coordinataY;
            private int giocatoriPresenti;



    public int getGiocatoriPresenti() {
        return giocatoriPresenti;
    }
    public void setGiocatoriPresenti(int giocatoriPresenti) {
        this.giocatoriPresenti = giocatoriPresenti;
    }
    public char getLetteraX() {
        return letteraX;
    }

    public void setLetteraX(char letteraX){
        this.letteraX = letteraX;
    }

    public Settore (int coordinataX, int coordinataY){
        this.coordinataX=coordinataX;
        this.coordinataY=coordinataY;
    }
    public int getX(){
        return coordinataX;
    }
    public int getY(){
        return coordinataY;
    }
    public Nome getSettoreNome() {
        return settoreNome;
    }
    public void setSettoreNome(Nome settoreNome) {
        this.settoreNome = settoreNome;
    }
    public static void add(Settore[][] settore) {
        // TODO Auto-generated method stub

    }
}
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);
    }


}
package mappa.creator;
import mappa.product.*;
import mappa.*;
public class MappaCreator {

    protected Mappa mappa;
    protected Settore settore;
    protected int x;
    protected int y;

        public MappaCreator(){

            Mappa mappa = new Mappa();
            this.mappa=mappa;
            int x; int y;
            if (mappa.getMatrice()[x][y]==1){
                Sicuro.Sicuro(x,y); //this is where i get the error
            }


        }
        public void createMappa(){
            Mappa mappa = new Mappa();
            this.mappa=mappa;
        }
        public void createSettore(){
            Settore settore = new Settore(x,y);
            this.settore=settore;
        }


}
package mappa;

public class Sicuro extends Settore {

    public Sicuro(int coordinataX, int coordinataY) {
        super(coordinataX, coordinataY);
        setSettoreNome(Nome.SICURO);
    }


}
package mappa;

public enum Nome {
SICURO, PERICOLOSO, SCIALUPPA, ALIENI, UMANI
}

3 个答案:

答案 0 :(得分:2)

更改

        Sicuro.Sicuro(x,y); //this is where i get the error

        new Sicuro(x,y); //this should not produce any error

new Sicuro()构造函数的调用。

构造函数不指定任何返回类型,并且必须与类具有完全相同的名称。

答案 1 :(得分:0)

请参阅以下帖子以更好地了解方法与构造函数

Methods vs Constructors in Java

Sicuro(x,y) is a constructor. 

如果它是静态方法,那么我们只能使用Classname调用它。

但是在你的代码中它是一个构造函数。 在为类创建对象时,会自动调用构造函数 像

  new Sicuro(x,y);

现在编译器将执行Sicuro(x,y)构造函数。

答案 2 :(得分:0)

我认为你想要从类Sicuro创建一个对象而不是调用它的一个方法。对象的创建调用类的构造方法。

替换:

Sicuro.Sicuro(X,Y);

使用:

Sicuro mysicuro = new Sicuro(x,y);

//然后用mysicuro做什么