【问题标题】:Looking for an implementation of an abstract method寻找抽象方法的实现
【发布时间】:2021-10-17 09:58:20
【问题描述】:

我需要制作一个类似于拉力赛的程序,有两种类型的车辆,摩托车和汽车,两种类型的摩托车,有和没有边车,问题是我需要验证是否只有摩托车一个数组列表,我的意思是,两轮车辆。该验证应在名为esDe2Ruedas() 的方法中完成,该方法由名为check() 的抽象覆盖方法调用,该方法应验证数组中的一组车辆是否能够在拉力赛中运行,如果它的true 数组的所有元素必须来自同一类型。

这里是代码

这就是程序排列车辆的方式

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

【问题讨论】:

  • 我是新来的,我不是在找人给我做代码,只是一些关于如何通过 esDe2Ruedas() 方法验证车辆是否有两个轮子的帮助跨度>
  • 我没有看到 Rally 类。但是在 Motorcycle 类上,你可以重写 esDe2Ruedas() 来返回 true 吗?并且在 GrandPrix 类中,使用 if 类 Motorcycle 的 if else 语句的 check() 方法根据您想要的返回 true 或 false ?不知道我是否明白你在找什么

标签: java class arraylist abstract-methods


【解决方案1】:

我猜你呈现的就是给定的。如果您提出了设计,那没关系,但我相信它可以改进。无论如何,我会尝试立即回答我认为是您的问题。

VehiculoMoto的超级类型(可以有边车,变成3轮车)。

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

Moto 继承了该方法

在检查方法中,您现在可以使用该方法区分Moto 和“Moto with sidecar”。

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多