无法访问数组对象内的子类中的数据

Cant access data in a subclass inside array object

大家下午好, 我有这个代码:

对象卡喵:

   public class Camiao {

    private String codigo;
    private int contaKm;
    private int capacidade;
    private String unidade;
    private tipoCamiao tipoMotor;

    public Camiao() {
    }

    public Camiao(String codigo, int contaKm, int capacidade, String unidade) {
        this.codigo = codigo;
        this.contaKm = contaKm;
        this.capacidade = capacidade;
        this.unidade = unidade;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public int getContaKm() {
        return contaKm;
    }

    public void setContaKm(int contaKm) {
        this.contaKm = contaKm;
    }

    public int getCapacidade() {
        return capacidade;
    }

    public void setCapacidade(int capacidade) {
        this.capacidade = capacidade;
    }

    public String getUnidade() {
        return unidade;
    }

    public void setUnidade(String unidade) {
        this.unidade = unidade;
    }
}

Cisterna 子类:

public class Cisterna extends Camiao {

    private String subTipo;

    public Cisterna() {
    }

    public Cisterna(String codigo, int contaKm, int capacidade, String unidade, String subTipo) {
        super(codigo, contaKm, capacidade, unidade);
        this.subTipo = subTipo;
    }

    /**
     * @return the subTipo
     */
    public String getSubTipo() {
        return subTipo;
    }

    /**
     * @param aSubTipo the subTipo to set
     */
    public void setSubTipo(String aSubTipo) {
        subTipo = aSubTipo;
    }
}

Mercadorias 子类:

public class Mercadorias extends Camiao {

    /*public enum subTipoCamiaoMercadorias {
        na, ba;
    };*/
    private String subTipo;

    public Mercadorias() {
    }

    public Mercadorias(String codigo, int contaKm, int capacidade, String unidade, String subTipo) {
        super(codigo, contaKm, capacidade, unidade);
        this.subTipo = subTipo;
    }

    /**
     * @return the subTipo
     */
    public String getSubTipo() {
        return subTipo;
    }

    /**
     * @param aSubTipo the subTipo to set
     */
    public void setSubTipo(String aSubTipo) {
        subTipo = aSubTipo;
    }
}

我将信息添加到数组的位置:

switch (codCamiao2) {

case "CI":camiao[i] = new Cisterna(linha[0], Integer.parseInt(linha[1]), Integer.parseInt(linha[2]), linha[3], linha[4]);

case "BT":camiao[i] = new Camiao(linha[0], Integer.parseInt(linha[1]), Integer.parseInt(linha[2]), linha[3]);

case "FG":camiao[i] = new Camiao(linha[0], Integer.parseInt(linha[1]), Integer.parseInt(linha[2]), linha[3]);

case "MC":camiao[i] = new Mercadorias(linha[0], Integer.parseInt(linha[1]), Integer.parseInt(linha[2]), linha[3], linha[4]);

}

我使用我的子类对象 Cisterna 和 Mercadorias 添加我的信息; 我使用我的主要对象 Camiao 添加信息;

我的问题是我可以在 Camiao 中访问我的 GET 和 SET,但我无法在 Cisterna 和 Mercadorias 中访问我的 GET 和 SET。

我用这个代码写的,但是我需要.getSubTipo()

代码

System.out.println(camiao[x].getCodigo() + "|" + camiao[x].getContaKm() + "|" + camiao[x].getCapacidade() + "|" + camiao[x].getUnidade() + "|");

您似乎在子类 CisternaMercadorias 中没有任何实例 getters/setters。 CisternaMercadorias 中的字段 subTipo 是静态的 - 即在 CisternaMercadorias 的所有实例之间共享。可能这是错误,您需要从 subTipo 字段和相关的 getter/setter 方法中删除 static 修饰符。

此外,您需要在每个 case 语句后使用 break

String codigo = linha[0];
int contaKm = Integer.parseInt(linha[1]);
int capacidade = Integer.parseInt(linha[2]);
String unidade = linha[3];
String subTipo = linha[4];

switch (codCamiao2) {
case "CI":
    camiao[i] = new Cisterna(codigo, contaKm, capacidade, unidade,  subTipo);
    break;
case "BT":
case "FG":
    camiao[i] = new Camiao(codigo, contaKm, capacidade, unidade);
    break;
case "MC":
    camiao[i] = new Mercadorias(codigo, contaKm, capacidade, unidade, subTipo);
    break;
}