案例:
- 某加油站推出了2种支付卡,一种是预存10000的金卡,后续加油享受8折优惠,另一种是预存5000的银卡,后续加油享受8.5折优惠。
- 请分别实现2张卡片进入收银系统后的逻辑,卡片需要包含主人名称,余额,支付功能。
1.创建一个父类Card:
public abstract class Card {
private String userName;
private double money;//卡片的余额
/**
*定义一个支付方法,表示卡片可以支付
* 因为每张卡片的支付方式不一样,所以不能在父类中定死,
* 但每张卡片都要执行支付功能且支付行为不一样,所以把支付手段定义为子类中的约定手段,使用抽象方法
* nomey:代表消费的余额。
*/
public abstract void pay(double nomey);
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
2.创建子类,金卡用户和银卡用户:
//金卡用户
public class GoldCard extends Card {
@Override
public void pay(double money02) {
System.out.println("尊贵的金卡会员,您好。");
System.out.println("您当前消费:" + money02 );
System.out.println("您的卡片当前余额是:" + getMoney());
//优惠价
double rs = money02 * 0.8;
System.out.println(getUserName() + "您实际消费为:" + rs);
//更新账户余额,这里假设他当前余额大于消费余额
setMoney(getMoney() - rs);
}
}
//银卡用户
public class SilverCard extends Card{
@Override
public void pay(double money02) {
System.out.println("尊贵的银卡卡会员,您好。");
System.out.println("您当前消费:" + money02 );
System.out.println("您的卡片当前余额是:" + getMoney());
//优惠价
double rs = money02 * 0.85;
System.out.println(getUserName() + "您实际消费为:" + rs);
//更新账户余额,这里假设他当前余额大于消费余额
setMoney(getMoney() - rs);
}
}
3.使用抽象类:
public class Demo {
public static void main(String[] args) {
//学习抽象类的基本使用:做父类,被继承,重写抽象方法
GoldCard c = new GoldCard();
c.setMoney(10000);
c.setUserName("qing");
c.pay(300);
System.out.println("剩余:" + c.getMoney());
SilverCard c1 = new SilverCard();
c1.setMoney(10000);
c1.setUserName("chen");
c1.pay(300);
System.out.println("剩余:" + c1.getMoney());
}
}