逻辑错误的抽象类

时间:2013-01-21 13:27:35

标签: java arrays methods abstract

我应该创建一个具有MotorVehicle抽象类的程序。 CarTruckVanMotorVehicle种。 setTerms()displayInfo()是唯一的摘要。 CarString transTypevoid Car()Vanint numPassengervoid Van(),Truckdouble payLoadvoid Truck()

输出应该是这样的:

  

品牌是马自达

     

车型是Sedan

     

颜色为红色

     

传输类型为自动

     

价格是840000.0

     

条款是5年支付

     

品牌是五十铃

     

车辆类型为卡车

     

颜色为白色

     

有效载荷容量为3.5

     

价格是910000.0

     

条款是3年支付

     

品牌是三菱

     

车辆类型是Family Van

     

颜色为蓝色

     

乘客人数为8

     

价格是1050000.0

     

条款是7年支付

但是我的程序仍然没有产生这个输出

这是我目前的代码:

public abstract class MotorVehicle
{
    private String vehicleType;
    private String brand;
    private String color;
    private String terms;

    public MotorVehicle(String vcl, String brn, String clr, String trm)
    {
        vehicleType = vcl;
        brand = brn;
        color = clr;
        terms = trm;
    }

    public String getVehicleType()
    {
        return vehicleType;
    }

    public String getBrand()
    {
        return brand;
    }

    public String getColor()
    {
        return color;
    }

    public abstract void setTerms();

    public abstract void displayInfo();

}

//=========================================

public class Car extends MotorVehicle
{
    String transType="";
    String vehicleType;
        String brand;
    String color;
    String terms;
    int price = 0;

    public Car(String vcl, String brn, String clr, String trm)
    {
        super(vcl, brn, clr, trm);
        vehicleType = vcl;
        brand = brn;
        color = clr;
        terms = trm;
    }

    public void Car()
    {
        brand = "Mazda";
        vehicleType = "Sedan";
        color = "Red";
        transType = "Automatic";
        price = (int) (700000 + (700000*0.2));
        Double.toString(price);
        terms = "5";   
    }

    public void setTerms()
    {
         return;
    }

    public void displayInfo()
    {
        System.out.println("Brand is " + brand);
        System.out.println("Vehicle type is " + vehicleType);
        System.out.println("Color is " + color);
        System.out.println("Transmission type is " + transType);
        System.out.println("Price is " + price);
        System.out.println("Terms is " + terms + " years to pay");
    }

}

//=================================

public class Truck extends MotorVehicle
{
    double payLoad=0.0;
    String vehicleType;
        String brand;
    String color;
    String terms;
    int price = 0;

    public Car(String vcl, String brn, String clr, String trm)
    {
        super(vcl, brn, clr, trm);
        vehicleType = vcl;
        brand = brn;
        color = clr;
        terms = trm;
    }

    public void Truck()
    {
        brand = "Isuzu";
        vehicleType = "Truck";
        color = "White";
        payLoad = 3.5;
        Double.toString(payLoad);
        price = (int) (700000 + (700000*0.3));
        Double.toString(price);
        terms = "3";     
    }

    public void setTerms()
    {
         return;
    }

    public void displayInfo()
    {
        System.out.println("Brand is " + brand);
        System.out.println("Vehicle type is " + vehicleType);
        System.out.println("Color is " + color);
        System.out.println("Payload capacity is " + payLoad);
        System.out.println("Price is " + price);
        System.out.println("Terms is " + terms + " years to pay");
    }   


 }

//==========================

public class Van extends MotorVehicle
{
    int numPassenger=0;
    String vehicleType;
        String brand;
    String color;
    String terms;
    int price=0;

    public Van(String vcl, String brn, String clr, String trm)
    {
            super(vcl, brn, clr, trm);
        vehicleType = vcl;
        brand = brn;
        color = clr;
        terms = trm;
    }

    public void Van()
    {
    brand = "Mitsubishi";
    vehicleType = "Family Van";
    color = "Blue";
    numPassenger = 8;
    String.valueOf(numPassenger);
    price = (int) (700000 + (700000*0.5));
    Double.toString(price);
    terms = "7";   
}

public void setTerms()
{
     return;
}

public void displayInfo()
{
    System.out.println("Brand is " + brand);
    System.out.println("Vehicle type is " + vehicleType);
    System.out.println("Color is " + color);
    System.out.println("Number of passenger is " + numPassenger);
    System.out.println("Price is " + price);
    System.out.println("Terms is " + terms + " years to pay");
}

}

//===================

这是主要计划:

public class MainVehicle 
{
    public static void main(String[] args)
    {
        BBVehicle[] vhl= new BBVehicle[3];

        int ctr=0;
        while(ctr<3)
        {
            if (ctr==0)
                vhl[ctr]=new Car();
            else if(ctr==1)
                vhl[ctr]= new Truck();
            else
                vhl[ctr]= new Van();
            vhl[ctr].displayInfo();
            ctr++;
        }
     }

}

我不确定我的程序有什么问题。请帮助我,谢谢

2 个答案:

答案 0 :(得分:2)

i)个

public void Car()
public void Truck()
public void Van()

您正在定义类构造函数的返回类型

应该是

public Car()
public Truck()
public Van()

构造函数类似于实例方法,但它与方法的不同之处在于它没有显式的返回类型,它不是隐式继承的,并且它通常对范围修饰符有不同的规则。

ii)在抽象类中定义无参数构造函数(来自注释)

iii)

    BBVehicle[] vhl= new BBVehicle[3];

    int ctr=0;
    while(ctr<3)
    {
        if (ctr==0)
            vhl[ctr]=new Car();

您正在将Car类投射到BBVehicle类。虽然,两个班级都不同。这两个班级之间没有任何关系。

答案 1 :(得分:1)

我要提出的第一条建议是,你不应该隐藏你的超级成员中的成员变量。

在每个子类中,声明与您在超类中定义的private变量同名的变量。相反,您应该简单地从子类中删除重复项,并且:

  1. 将超类中变量的可见性更改为可供子类使用的内容(即protected
  2. 利用getter以displayInfo()方式访问它们。为此,您需要在超类中为每个字段设置get[VariableName]()