使用面向对象的多态性模仿会员卡消费系统,设计会员卡类,可派生不同的会员卡类型,当使用不同的会员卡消费时其折扣不同。如一般会员卡消费打9折;VIP会员卡打7折;超级VIP卡打5折。其具体的实现效果如下所示:

输入应消费的金额->选择相应的会员卡->显示实际的应付金额和消费状态信息。

实验要求:

  1. 程序设计必须符合面向对象的编程思想;
  2. 设计会员卡类,包含卡类型和卡内金额两个属性;
  3. 由会员卡类进一步派生出不同类型的会员卡,如:一般会员卡消费打9折;VIP会员卡打7折;超级VIP卡打5折;
  4. 对不同会员卡类进行具体实现;
  5. 设计并实现刷卡机类,主要用于人机交互和显示消费状态信息;
  6. 创建不同类型会员卡的具体对象,并进行相应调用显示消费状态信息。

      实验目的

  1. 掌握方法的继承,重载与覆盖;
  2. 掌握抽象类的定义与继承;
  3. 理解多态的概念,掌握接口的实现方法。
package nchu.demo1;
import java.util.Scanner;
public class Membership1 {private String kind;  //会员卡类型private double discount;  //折扣大小private double balance;  //余额public Membership1() {}public String getKind() {return kind;}public void setBalance(double balance) {this.balance = balance;}public double getBalance() {return balance;}public double getDiscount() {return discount;}public double deduct(double x){return getBalance()-x*getDiscount();}//改变余额的方法public double lastBalance(double x){setBalance(getBalance()-x*getDiscount());return getBalance();}}class AMembership1 extends Membership1 {private String kind="A类会员卡";public String getKind() {return kind;}@Overridepublic double deduct(double x){return getBalance()-x*0.5;}//改变余额的方法public double lastBalance(double x){//其实应该把每个成员变量用get来调用,然后在定义的时候每个成员变量都私有化//this.balance = getBalance()-discount*getDiscount();setBalance(getBalance()-x*0.5);return getBalance();}}class BMembership1 extends Membership1 {private String kind="B类会员卡";public String getKind() {return kind;}@Overridepublic double deduct(double x){return getBalance()-x*0.7;}//改变余额的方法public double lastBalance(double x){//其实应该把每个成员变量用get来调用,然后在定义的时候每个成员变量都私有化//this.balance = getBalance()-discount*getDiscount();setBalance(getBalance()-x*0.7);return getBalance();}}class CMembership1 extends Membership1 {private String kind="C类会员卡";public String getKind() {return kind;}@Overridepublic double deduct(double x){return getBalance()-x*0.9;}//改变余额的方法public double lastBalance(double x){//其实应该把每个成员变量用get来调用,然后在定义的时候每个成员变量都私有化//this.balance = getBalance()-discount*getDiscount();setBalance(getBalance()-x*0.9);return getBalance();}}class Poss {//余额是卡的属性,所以扣钱功能封装在卡的方法里,这里简易的设计一个“消费金额”,和一个判断卡内余额是否足够支付的方法private double consume;public Poss() {}//多态实现1public boolean jud(Membership1 p){if(p.deduct(consume)>0)return true;else  {System.out.println("余额不足!"); return false;}}public double getConsume() {return consume;}public void setConsume(double consume) {this.consume = consume;}}class MemTest {public static void main(String[] args) {Poss mc = new Poss(); //一台刷卡机//三种卡,因为构造器不能继承,所以用set初始化每张卡余额System.out.println("请输入商品价格为:");Scanner sc = new Scanner(System.in);//模拟人对刷卡机输入需要扣除的钱double price = sc.nextDouble();mc.setConsume(price);Membership1 vipA = new AMembership1(); vipA.setBalance(2000); useMem(vipA,mc);Membership1 vipB = new BMembership1(); vipB.setBalance(1000); useMem(vipB,mc);Membership1 vipC = new CMembership1(); vipC.setBalance(500);  useMem(vipC,mc);}//多态实现2;懒得写instanceof了public static void useMem(Membership1 vip,Poss mc){System.out.println("正在使用:"+ vip.getKind());if (mc.jud(vip)) {   //如果余额足够System.out.println("购买成功!卡内余额为:"+vip.lastBalance(mc.getConsume()));}else return;}}
  1. 多态不能调用子类的特殊功能,只能调用父类中原本就有的方法,或子类重写父类的方法。
  2. 多态即对象的多种形态
  3. 确保多态中,对象是我想要的那个类new出来的对象,可以用instanceof。
  4. 继承后子类也不能调用父类的私有化的成员变量,但可以通过get、set方法去调用。
  5. 一个儿子不能有多个爹,一个爹可以有多个儿子
  6. 封装:对象代表什么就得封装对应的数据,并提供数据对应的行为。

仅供参考!

JAVA:使用面向对象的多态性模仿会员卡消费系统,设计会员卡类,可派生不同的会员卡类型,当使用不同的会员卡消费时其折扣不同。相关推荐

  1. java 泛型 父子_使用通配符和泛型:完成父子类关系的List对象的类型匹配

    泛型和通配符 使用泛型和通配符都可以让一个方法所表示的算法逻辑适应多种类型. Java中具备继承关系的类A.B(A extends B)它们的集合List和List之间是没有继承关系的, 可以使用泛型 ...

  2. java 168转换成861_java实验-java语言面向对象编程基础

    java实验-java语言面向对象编程基础 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 广州大学学生实验报告广州大学学生实验报告 ...

  3. Java笔记-面向对象(上)

    面向对象(上) Java是面向对象的程序设计语言,Java语言提供了定义类.成员变量.方法等最基本的功能.类可被认为是一种自定义的数据类型,可以使用类来定义变量,所用使用类定义的变量都是引用变量,它们 ...

  4. JavaSE-Adventure(VII) Java OOP 面向对象程序设计

    JavaSE-Adventure(VII) Java & OOP 面向对象程序设计 CONTENTS JavaSE-Adventure(VII) Java & OOP 面向对象程序设计 ...

  5. 【阶段一】java之面向对象上

    面向对象语言具有如下特征: 面向对象是一种常见的思想,比较符合人们的思考习惯: 面向对象可以将复杂的业务逻辑简单化,增强代码复用性: 面向对象具有抽象.封装.继承.多态等特效. 1.什么是面对对象 J ...

  6. java基础面向对象总结

    面向对象 面向对象的思想概述 程序员从面向过程的执行者转化成了面向对象的指挥者 面向对象分析方法分析问题的思路和步骤: 1.根据问题需要,选择问题所针对的现实世界中的实体. 2.从实体中寻找解决问题相 ...

  7. (20)Java基础 --面向对象(1)

    目录 面向对象 一.概述 二.生活举例 三.类与对象的关系 四.类的构成 五.类的定义 类的属性 类的方法 创建实例(对象) 内存分配图 六.对象的基本使用 七.局部变量与成员变量的区别 八.面向对象 ...

  8. Java中面向对象三大特征总结

    JAVA中面向对象的三大特征: 面向对象具有继承性(Inheritance) 面向对象具有多态性(Polymorphism) 面向对象具有封装性(Encapsulation) 一.继承 多个类具有共同 ...

  9. Java基础-面向对象3

    抽象类的应用: 模板类的设计模式 // 抽象类的应用: 模板方法的设计模式 public class TemplateTest {public static void main(String[] ar ...

最新文章

  1. Android语音信号波形显示
  2. Java字节码浅析(—)
  3. ajax使用异步问题
  4. linux几个常用的环境变量配置文件
  5. Go 语言范围(Range)
  6. 揭密微信《跳一跳》小游戏那些外挂
  7. 基于Yarp实现内网http穿透
  8. json返回页面读取data里的值都是object_【一】尤大神都说Vite香,让我来手把手分析Vite原理...
  9. linux网络完全与防护
  10. 微信开发者工具——支持less的插件
  11. 广州蓝景分享—「web前端素材」使用CSS动画效果(上)
  12. Visio从安装到使用完整版
  13. 一套工地实名制考勤管理系统有哪些软硬件组成
  14. C语言程序设计-用英文单词模拟数学计算系统
  15. DAY9 :划词翻译字典 goldendict 使用教程
  16. 基于JSP的共享单车管理系统的设计与实现
  17. 面对人工智能,我们应有的态度
  18. Ant Design中Form组件重置验证条件resetFields()方法
  19. 广义线性模型到底是个什么鬼?
  20. Chatbot 架构

热门文章

  1. NameNode检查点状态报警:文件系统检查点已有 1 天,2 小时,23 分钟
  2. 华硕 BIOS 硬件虚拟化开启
  3. 常用正则表达式,以及例题
  4. Java集合详解--Map
  5. postgresql开源监控工具——pgwatch详细安装和测试
  6. 使用navicat 导出mysql数据表文档
  7. OSChina 娱乐弹弹弹
  8. Qt学习总结——飞机大战小游戏制作
  9. 消防车Firetruck
  10. 服务器卡在系统初始化,服务器一直初始化内存