gpt4 book ai didi

java - 如何访问子类中的获取和设置?

转载 作者:行者123 更新时间:2023-12-01 17:41:56 24 4
gpt4 key购买 nike

在此应用程序中,我们有 Automovel 类:

public class Automovel {
private String marca;
private String matricula;
private String anoConstrucao;
private Motor motor;
private int preco = 0;
}

(及其构建器、 getter 和 setter )并且有一个名为 Motor 的类,它是 Automovel 类的属性。

电机类别:

private int potencia;

public Motor() {}

public Motor(int potencia){
this.potencia = potencia;
}

public int getPotencia() {return this.potencia;}

public void setPotencia(int potencia) {
this.potencia = potencia
}

该类还有 2 个子类(MotorEletrico 和 MotorCombustao):

电机电气:

public class MotorEletrico extends Motor {

private int autonomia;
public MotorEletrico() {}

public MotorEletrico(int potencia, int autonomia) {
super(potencia);
this.autonomia = autonomia;
}

public int getAutonomia() {
return autonomia;
}

public void setAutonomia(int autonomia) {
this.autonomia = autonomia;
}

}

电机燃烧:

public class MotorCombustao extends Motor{

private int cilindrada;
private String combustivel;

public MotorCombustao(){}

public MotorCombustao(int potencia, int cilindrada, String combustivel){
super(potencia);
this.cilindrada = cilindrada;
this.combustivel = combustivel;
}

public int getCilindrada(){
return cilindrada;
}

public void setCilindrada(int cilindrada){
this.cilindrada = cilindrada;
}

public String getCombustivel(){
return combustivel;
}

public void setCombustivel(String combustivel){
this.combustivel = combustivel;
}
}

我将带有 X 引擎的汽车存储在 Automovel 对象数组中,但是当我尝试访问子类 (MotorCombustao/MotorEletrico) 的 getter 和 setter 时,仅出现母类 (Motor) 的 getter 和 setter 。我的问题是我无法访问电机子类的 getter 和 setter。这是我尝试过的示例:

Automovel arrayteste[] = new Automovel[49];

Motor motor1 = new MotorEletrico();
motor1.setPotencia(5);

Automovel automovel1 = new Automovel("Opel", "xx-12-xx", "2000", motor1, 2000);

arrayteste[0] = automovel1;

System.out.println(arrayteste[0].getMotor().getPotencia()); //Here, I can't Do .getAutonomia

最佳答案

简短回答

你需要转换

System.out.println(((MotorElettrico)(arrayteste[0].getMotor())).getAutonomia());

TL;DR

当你写下

Motor motor1 = new MotorElettrico();

您正在使用多态性

例如,当您有一个包含多个电机类型的电机列表,并且您想要打印所有这些potencia时,这非常有用。

然后你可以这样写:

List<Motor> list = Arrays.asList(new MotorElectico(), new MotorCombustao());
// ----- some set

print(list);

其中 print 方法是这样的:

public void print(List<Motor> list){
for(Motor m : list){
System.out.println(String.format("Potencia %d", m.getPotencia()));
}
}

发生这种情况是因为 MotorElectico IS A 电机并且始终允许向上转型(转型为父类(super class)型)。

就您而言,您必须进行向下转换:您告诉编译器 arraytest[0].getMotor() 包含一个 Motor code> 但这个 Motor 实际上是一个 MotorElectrico:您要求编译器信任您。如果在编译时 arraytest[0].getMotor() 不应该是 MotorElectrico,您将收到 ClassCastException

关于java - 如何访问子类中的获取和设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60017800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com