寻找抽象方法的实现



我需要做一个程序,就像一个拉力赛,有两种类型的车辆,摩托车和汽车,两种类型的摩托车,有和没有挎车,问题是我需要验证数组列表中是否只有一辆摩托车,我的意思是,两个轮子的车辆。该验证应该在一个名为esDe2Ruedas()的方法中完成,该方法由一个名为check()的抽象重写方法调用,该方法应该验证数组中的一组车辆是否能够在集会中运行,如果它为真,则数组中的所有元素必须来自同一类型。

代码

程序就是这样排列车辆的

GrandPrix gp1 = new GrandPrix();
gp1.agregar(v1);
//gp1.mostrar(v1);
gp1.agregar(v2);
System.out.println(gp1.check());
GrandPrix gp2 = new GrandPrix();
gp2.agregar(vt1);
gp2.agregar(vt2);
gp2.agregar(m2);
System.out.println(gp2.check());
GrandPrix gp3 = new GrandPrix();
gp3.agregar(vt1);
gp3.agregar(vt2);
gp3.agregar(m1);
System.out.println(gp3.check());
GrandPrix gp4 = new GrandPrix();
gp4.agregar(m1);
gp4.agregar(m2);
System.out.println(gp4.check());

这是使用

的类
import java.util.ArrayList;
public class GrandPrix extends Rally{

ArrayList<Vehiculo> ve = new ArrayList<Vehiculo>();

public void agregar(Vehiculo v) {
ve.add(v);
}

public void agregar(Carro c) {
ve.add(c);
}

public void agregar(Moto m) {
ve.add(m);
}

@Override
boolean check() {// HERE I VERIFY IF THE VEHICLES ARE COMPATIBLE
return false;
}

}

在这个类中,一切都在进行

public class Vehiculo {

private String Nombre;
private double velocidad_max;
private int peso;
private int comb;

public Vehiculo() {
setNombre("Anónimo");
setVel(130);
setPeso(1000);
setComb(0);
}

public Vehiculo(String string, double d, int i, int j) {
setNombre(string);
setVel(d);
setPeso(i);
setComb(j);
}
double rendimiento() {
return velocidad_max/peso;
}
public boolean mejor(Vehiculo otroVehiculo) {
return rendimiento()>otroVehiculo.rendimiento();
}

public String toString() {
return getNombre()+"-> Velocidad máxima = "+getVel()+" km/h, Peso = "+getPeso()+" kg";
}

/**************************************
---------SET And GET Nombre------------
***************************************/

public String getNombre() {
return Nombre;
}
public void setNombre(String nuevoNombre) {
this.Nombre=nuevoNombre;
}

/**************************************
---------SET And GET velocidad_max------------
***************************************/

public double getVel() {
return velocidad_max;
}
public void setVel(double nuevaVel) {
this.velocidad_max=nuevaVel;
}

/**************************************
---------SET And GET peso------------
***************************************/

public double getPeso() {
return peso;
}
public void setPeso(int nuevoPeso) {
this.peso=nuevoPeso;
}
/**************************************
---------SET And GET comb------------
***************************************/

public int getComb() {
return comb;
}
public void setComb(int comb) {
this.comb = comb;
}

boolean esDe2Ruedas() {
return false;
}
}

这是摩托车的类别,理论上与汽车的类别相同,没有挎斗的东西

public class Moto extends Vehiculo{

private boolean sidecar;
public Moto(String string, double d, int i, int j) {
setNombre(string);
setVel(d);
setPeso(i);
setComb(j);
setSidecar(false);

}
public Moto(String string, double d, int i, int j, boolean b) {
setNombre(string);
setVel(d);
setPeso(i);
setComb(j);
setSidecar(b);
esDe2Ruedas(false);
}
public String toString() {
String str = null;
if(isSidecar())
str =super.toString()+", Moto, con sidecar";
else
str =super.toString()+", Moto";
return str;
}
public boolean isSidecar() {
return sidecar;
}
public void setSidecar(boolean sidecar) {
this.sidecar = sidecar;
}

我猜你所呈现的就是给定的。如果这个设计是你提出的,那是可以的,但我相信它还可以改进。不管怎样,我尽量直接回答你的问题。

VehiculoMoto的超级型(可以有侧车,变成三轮)。

Vehiculo有一个方法esDe2Ruedas,返回false。

Moto继承了该方法<——这是错误的,它应该覆盖它,并根据侧车返回期望的布尔值。

在检查方法中,您现在可以区分Moto和"Motowith sidecar"

相关内容

最新更新