系统需求
某加油站推出了2种支付卡,一种是预存10000的金卡,后续加油享受8折优惠,
一种是预存5000的银卡 ,后续加油享受8.5折优惠。
请分别实现2种卡片进入收银系统后的逻辑,卡片需要包含主人名称,余额,支付功能。
分析实现
1.创建一张卡片父类:定义属性包括主人名称、余额、支付功能(具体实现交给子类)
2.创建一张白金卡类:重写支付功能,按照原价的8折计算输出。
3.创建一张银卡类:重写支付功能,按照原价的8.5折计算输出。
实现步骤
1.先创建父类Card,用于子类继承;
public abstract class card {
private String name;
private double momey;
//抽象方法中的形参paymoney是用户本来要支付的价钱
public abstract void pay(double paymoney);
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getMomey() { return momey; }
public void setMomey(double momey) { this.momey = momey; }
}
2.创建子类金卡goldCard
public class goldCard extends card {
@Override
public void pay(double paymoney) {
//1.计算优惠金额
double rsmoney = paymoney * 0.8;
System.out.println(getName()+"贵宾,您消费前账户余额:" + getMomey());
//2.定义变量接收账户余额减去消费金额,然后用set方法更新账余额
double lastMoney = getMomey() - rsmoney;
setMomey(lastMoney);
System.out.println(getName()+"贵宾,您消费后账户余额:" + getMomey());
}
}
3.同样的方法创建子类银卡silveraCard
public class silveraCard extends card {
@Override
public void pay(double paymoney) {
//1.计算优惠金额
double rsmoney = paymoney * 0.85;
System.out.println(getName()+"贵宾,您消费前账户余额:" + getMomey());
//2.定义变量接收账户余额减去消费金额,然后用set方法更新账余额
double lastMoney = getMomey() - rsmoney;
setMomey(lastMoney);
System.out.println(getName()+"贵宾,您消费后账户余额:" + getMomey());
}
}
4.创建一个测试类用于查看结果
public class Test {
public static void main(String[] args) {
//1.分别创建金卡和银卡对象并存入金额
goldCard G = new goldCard();//金卡
G.setMomey(10000);
G.setName("库里");
//2.调用pay方法,模拟加油付钱
G.pay(500);
silveraCard S = new silveraCard();//银卡
S.setMomey(5000);
S.setName("汤普森");
S.pay(500);
}
}
输出结果