考察知识点:面向对象编程中的继承、多态
需求:
- 某加油站为了吸引更多的车主,推出了如下活动,车主可以办理金卡和银卡。
- 卡片信息包括:车牌号码、车主姓名、电话号码、卡片余额。
- 金卡办理时入存金额必须>=5000元,银卡办理时预存金额必须>=2000元,金卡支付时享受8折优惠,银卡支付时享受9折优惠,金卡消费满200元可以提供打印免费洗车票的服务。
- 需求:请使用面向对象编程,完成该加油站支付机的存款和消费程序。
package nuyoah.demo;
import java.util.Scanner;
/**
* @Project_Name: Payment
* @Author: Natural Pride
* @Date: 2025/3/16 21:59
* @Description: TODO
*/
public class Test {
public static void main(String[] args) {
//目标:加油支付功能实战
//1、创建卡片类,以便创建金卡或者银卡对象,封装车主的数据。
//2、定义一个卡片父类:Card,定义金卡和银卡的共同属性和方法。
//3、定义一个金卡类,继承CaPd类:金卡必须重写消费方法(8折优惠),独有功能打印系车票。
//4、办一张金卡:创建金卡对象。交给一个独立的业务(支付机)存款,消费。
GoldCard goldCard = new GoldCard("粤A12345", "张三", 123456789, 5000);
pay(goldCard);
//4、办一张银卡:创建银卡对象。交给一个独立的业务(支付机)存款,消费。
SilverCard silverCard = new SilverCard("粤A12346", "李四", 123456789, 1000);
pay(silverCard);
}
//支付机
public static void pay(Card card){
System.out.println("欢迎使用支付机,请刷卡:");
System.out.println("请输入消费金额:");
Scanner sc=new Scanner(System.in);
double money=sc.nextDouble();
card.consume(money);
}
}
package nuyoah.demo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Scanner;
/**
* @Project_Name: Card
* @Author: Natural Pride
* @Date: 2025/3/16 22:04
* @Description: TODO 卡片父类
* lombok技术可以实现为类自动添加getter setter方法无参数构造器,toString方法等
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Card {
//车牌号
private String cardId;
//姓名
private String name;
//电话
private int phone;
//余额
private double money;
//预存金额
public void saveMoney(double money){
this.money+=money;
}
//消费方法
public void consume(double money){
this.money-=money;
}
}
public class GoldCard extends Card {
public GoldCard(String cardId, String name, int phone, double money) {
super(cardId, name, phone, money);
}
@Override
public void consume(double money) {
System.out.println("使用金卡支付" + money + "元");
System.out.println("优惠后价格为:" + money * 0.8);
if (getMoney() < money * 0.8) {
System.out.println("您当前余额为:" + getMoney() + "元,请充值");
return;
}
//更新余额
setMoney(getMoney() - money * 0.8);
System.out.println("支付成功,当前余额为:" + getMoney() + "元");
if (money * 0.8 > 200) {
System.out.println("您本次消费" + money * 0.8 + "元,赠送您一张洗车券");
} else {
System.out.println("您本次消费" + money * 0.8 + "元,没有任何优惠券");
}
}
}
public class SilverCard extends Card{
public SilverCard(String cardId, String name, int phone, double money) {
super(cardId, name, phone, money);
}
@Override
public void consume(double money) {
System.out.println("使用银卡支付" + money + "元");
System.out.println("优惠后价格为:" + money * 0.9);
if (getMoney() < money * 0.9) {
System.out.println("您当前余额为:" + getMoney() + "元,请充值");
return;
}
//更新余额
setMoney(getMoney() - money * 0.9);
System.out.println("支付成功,当前余额为:" + getMoney() + "元");
}
}