我有一个程序可以解释和排序汽车经销商的数据,并且在尝试检索存储在阵列中的汽车的颜色时出错。
这是主类及其子类。
class Car
{
protected String model;
protected int price;
protected int year;
public Car(String m, int y, int p)
{
model = m;
price = p;
year = y;
}
}
class NewCar extends Car
{
protected String color;
public NewCar(String m, int y, int p, String c)
{
super(m, y, p);
color = c;
}
public String toString()
{
return "Model: " + model + "\n"
+ "Year: " + year + "\n"
+ "Price: $" + price + "\n"
+ "Color: " + color + "\n"
+ "Selling Price: " + price + "\n\n";
}
}
这是另一个发生错误的类,位于if(cars[z].color.equals(shade))
。
该程序在Car类中找不到变量颜色。
class CarDealerShip
{
public String printAllCarsOfColor(String shade)
{
String s = "";
for(int z = 0; z < i; z++)
{
if(cars[z].color.equals(shade))
{
s += "Car " + (z + 1) + "\n" + cars[z].toString();
}
}
return s;
}
如何让程序看起来在NewCar类中存在变量颜色?
答案 0 :(得分:3)
您的数组cars
似乎是Car[]
类型。在引用数组元素后引用变量Car
,无法判断它是否引用Car
,NewCar
或Car
的另一个子类}。
您希望cars[z]
拥有属性color
,因此cars
可能属于NewCar[]
类型,而不是Car[]
。
另一种选择是将属性color
移至超类Car
,以便任何Car
都可以有颜色。
答案 1 :(得分:1)
使用受保护的访问时,该字段将在同一个包中的类中或在基类的子类中可用。我假设访问CarDealerShip
字段的类color
不在同一个包中,或者不扩展Car
。
答案 2 :(得分:1)
color
受NewCar
保护。您只能在子类中访问受保护的变量。您需要将color
移至Car
并在public String getColor()
中添加Car
方法,以使其可用于不属于Car
继承的类层次结构。
public String getColor() {
return color;
}
然后你的病情就是
if(cars[z].getColor().equals(shade))
<强>更新强>
如果您希望color
位于NewCar
,则应在public String getColor();
中添加NewCar
方法,cars[]
应为NewCar[]
,等等,
NewCar cars[] = new NewCar[arraySize]();
这样你将失去继承功能,你不能再使用Car cars[] = new NewCar[arraySize]
。
答案 3 :(得分:0)
如果要求color
必须在课程NewCar
中,您可以使用instanceof
运算符然后投射它:
class CarDealerShip
{
public String printAllCarsOfColor(String shade)
{
String s = "";
for(int z = 0; z < i; z++)
{
if (cars[z] instanceof NewCar)
{
NewCar nc = (NewCar)cars[z];
if (nc.color.equals(shade))
{
s += "Car " + (z + 1) + "\n" + nc.toString();
}
}
}
return s;
}
}
实际上,您跳过每个Car
而不是NewCar
,并且只使用属于该类NewCar
的实例。