/**
* 指定卡号换套餐
*
* @param number
* @param packType
*/
public void changingPack(String number, String packNum) {
MobileCard card; // 指定的手机卡
ServicePackage pack = null; // 要换的套餐
if (isExistCard(number)) {
card = cards.get(number);
// 获取要换的套餐对象
switch (packNum) {
case "1":
pack = new TalkPackage();
break;
case "2":
pack = new NetPackage();
break;
default:
pack = new SuperPackage();
break;
}
if (!(card.getSerPackage() instanceof pack)) { //报错的地方
// 该卡余额中减去当月套餐资费
if (card.getMoney() >= pack.getPrice()) {
card.setMoney(card.getMoney() - pack.getPrice());
// 换套餐
card.setSerPackage(pack);
// 当月实际使用数据清零
card.setRealTalkTime(0);
card.setRealFlow(0);
card.setRealSMSCount(0);
// 当月消费金额设置为新套餐月资费
card.setConsumAmount(pack.getPrice());
System.out.print("更换套餐成功!");
pack.showInfo();
} else {
System.out.println("对不起,您的余额不足以支付新套餐本月资费,请充值后再办理更换套餐业务!");
return;
}
} else {
System.out.println("对不起,您已经是该套餐用户,无需换套餐!");
}
} else {
System.out.println("对不起,该卡号未注册,不能换套餐!");
}
}
pack报未识别错误
尝试了给pack.getclass()
理解为定义pack的地方ServicePackage是个抽象类,所以eclipse认为pack不是个类对象
解决方案
if (!(card.getSerPackage().getClass().getName().equals(pack.getClass().getName())))
将if内判断条件改为获取两个类的类名,用类名比较类名,而不是对象比较对象