用java在加油站办卡充值 卡ID,余额,电话号码,充值消费 金卡充值消费8折并且如果消费满200送洗车票 银卡充值消费九折,可以适用多态
时间: 2024-11-09 21:19:09 浏览: 13
在Java中设计加油卡系统,我们可以创建一个抽象的`Card`类作为基础,包含共同属性如卡号(cardId)、余额(balance)和电话(phoneNumber)。然后分别为金卡和银卡创建`GoldCard`和`SilverCard`子类,并实现`Card`的`充`和`消费`方法。为了体现多态性,这两个子类可以覆盖父类的方法并添加各自的优惠策略:
```java
public abstract class Card {
private String cardId;
private double balance;
private String phoneNumber;
public Card(String cardId, double balance, String phoneNumber) {
this.cardId = cardId;
this.balance = balance;
this.phoneNumber = phoneNumber;
}
// 公共方法
public void recharge(double amount) {
balance += amount;
System.out.println("成功充值 " + amount + "元,当前余额:" + balance);
}
public void consume(double amount) {
if (amount <= balance) {
balance -= amount;
System.out.println("已消费 " + amount + "元,当前余额:" + balance);
} else {
System.out.println("余额不足");
}
}
// 简单实现,其他优惠由子类覆盖
public double getDiscount() { return 1; }
}
public class GoldCard extends Card {
@Override
public double getDiscount() { return 0.8; }
// 如果消费满200元,额外赠送洗车票
public boolean hasFreeCarWash(double consumption) {
return consumption >= 200 && super.getDiscount() == 0.8;
}
}
public class SilverCard extends Card {
@Override
public double getDiscount() { return 0.9; }
// 与GoldCard类似,这里不需要再次检查是否满足200元条件,因为折扣已经固定了
}
// 使用示例
public static void main(String[] args) {
Card goldCard = new GoldCard("123456", 500, "1234567890");
Card silverCard = new SilverCard("789012", 800, "9876543210");
goldCard.recharge(300); // 按照8折规则
goldCard.consume(250);
silverCard.recharge(200);
silverCard.consume(180); // 按照9折规则
// 判断金卡消费满200是否有免费洗车票
if (goldCard.hasFreeCarWash(250)) {
System.out.println("恭喜您获得免费洗车票!");
}
}
```
阅读全文