我应该创建一个具有MotorVehicle
抽象类的程序。 Car
,Truck
,Van
是MotorVehicle
种。 setTerms()
和displayInfo()
是唯一的摘要。 Car
有String transType
和void Car()
,Van
有int numPassenger
和void Van(
),Truck
有double payLoad
, void 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++;
}
}
}
我不确定我的程序有什么问题。请帮助我,谢谢
答案 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
变量同名的变量。相反,您应该简单地从子类中删除重复项,并且:
protected
)displayInfo()
方式访问它们。为此,您需要在超类中为每个字段设置get[VariableName]()
。