Java-抽象类(abstract)附加油站充卡案例
目录
一、抽象类概述
1.定义
2.注意事项
3.抽象的使用场景(基本作用)
二、抽象类的案例
1.系统需求
2.分析实现
3.代码展示
4.运行截图
三、抽象类的特征、注意事项小结
1.特征和注意事项
2.final和abstract的关系
一、抽象类概述
1.定义
(1)在java中abstract是抽象的意思,可以修饰类、成员方法。
(2)abstract修饰类,这个类就是抽象类;修饰方法,这个方法就抽象方法。
代码写法:
修饰符 abstract class 类名{
修饰符 abstract 返回值类型 方法名称(形参列表);
}
public abstract class Animal{public abstract void run();
}
2.注意事项
(1)抽象方法只有方法签名,不能声明方法体
public abstract void run();
(2)一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则会报错
3.抽象的使用场景(基本作用)
(1)抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承
(2)当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类可以声明成抽象类。
二、抽象类的案例
1.系统需求
(1)某加油站推出了两种支付卡,一种是预存10000的金卡,后续加油享受8折优惠;一种是预存5000的银卡,后续加油享受8.5折优惠。
(2)请分别实现两种卡片进入收银系统后的逻辑,卡片需要包含主人的姓名、余额、支付功能。
2.分析实现
(1)创建一张卡片父类:定义属性包含主人姓名,余额,支付功能(具体实现交给子类)
(2)创建一张金卡类:重写支付功能、按照原价的8折计算输出
(3)创建一张银卡类:重写支付功能、按照原价的8.5折计算输出
3.代码展示
父类(Card)
public abstract class Card {private String userName;private double money;/*定义一个支付方法,表示卡片可以支付*/public abstract void pay(double money2);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;}
}
子类(GoldCard)
public class GoldCard extends Card{@Overridepublic void pay(double money2) {System.out.println("您当前消费: " + money2);System.out.println("您的金卡当前余额是: " + getMoney());//优惠价:double rs = money2 * 0.8;System.out.println(getUserName() + "您实际支付:" + rs);//更新账户余额setMoney(getMoney() - rs);}
}
子类(SliverCard)
public class SilverCard extends Card{@Overridepublic void pay(double money2) {System.out.println("您当前消费: " + money2);System.out.println("您的银卡当前余额是: " + getMoney());//优惠价:double rs2 = money2 * 0.85;System.out.println(getUserName() + "您实际支付:" + rs2);//更新账户余额setMoney(getMoney() - rs2);}
}
测试类(Test)
public class Test {public static void main(String[] args) {GoldCard c = new GoldCard();c.setMoney(10000);c.setUserName("taylor");c.pay(300);System.out.println("剩余: " + c.getMoney());System.out.println("--------------------------");SilverCard s = new SilverCard();s.setMoney(5000);s.setUserName("katy");s.pay(500);System.out.println("剩余: " + s.getMoney());}
}
4.运行截图
三、抽象类的特征、注意事项小结
1.特征和注意事项
(1)类有的成员(成员对象、方法、构造器)抽象类都具备。
(2)抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
(3)一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这类也必须定义成抽象类。
(4)不能用abstract修饰变量、代码块和构造器
(5)最重要的特征:得到了抽象方法,失去了创建对象的能力!(有得有失)
2.final和abstract的关系
(1)互斥关系(即不能同时出现)
(2)abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承
(3)抽象方法定义通用功能让子类重写,final定义的方法子类不能重写
Java-抽象类(abstract)附加油站充卡案例相关推荐
- java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- Java抽象类(Abstract Class)与接口(Interface)区别
抽象类与接口比较 抽象类跟接口类似,都不能实例化,可能包含不需实现方法或已实现的方法. 抽象类可以定义一些不是静态或常量的字段,定义 public, protected, private访问级别的具体 ...
- 晋南讲堂之Java抽象类(abstract)与接口(interface)区分
抽象类(abstract)和接口(interface)的对比 1. 抽象类(abstract) 我们一般声明一个抽象类按照如下形式: abstract class ClassName{//成员变量 ...
- JAVA抽象类——abstract
1. 抽象方法 如果父类中一定含有某个方法,但如何实现并不能确定,这就应该是一个抽象方法. 如父类是图形,方法是计算图形的面积,因为每一种图形都有不同的面积计算公式,所以如何计算图形的面积不能确定,那 ...
- java抽象类_Java抽象类
java抽象类 Abstract class in Java is similar to interface except that it can contain default method imp ...
- Java接口和Java抽象类(转,原文已被删除)
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- Java抽象类(abstract)、final关键字
抽象类 (abstract) 抽象类的特点: 抽象类为继承而生 抽象方法不能有代码体 子类要想继承父类 就必须要重写父类的全部抽象方法 Father.java public abstract clas ...
- Java中抽象类 abstract和interface的区别
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...
- Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...
最新文章
- python excel xldr xlwt xlutils 使用简介
- 机器学习奠基人Michael Jordan:下代技术是融合经济学,解读2项重要进展
- php 生成等比例缩略图,PHP等比例生成缩略图
- NLP深度学习:近期趋势概述 1
- 机器学习(4.文本数据的特征抽取(第二种TfidfVectorizer(TF-IDF)))
- mybatis 插件原理
- 如何解决90%的报表设计难题?300张报表模板任君挑选
- spring roo_使用Spring Roo进行概念验证
- 有意思的逻辑思维题(一)(hdu2018,2160,2053)
- 用poi-3.6-20091214.jar 实现java给excel资料加密
- 欧拉函数知识点总结及欧拉函数打表代码(数论)
- java 求两点的角度_计算两点之间的角度 – java
- wake on lan 实现远程开机(远程开关机程序)
- 宝塔面板防火墙安装和使用教程详解
- 支持向量机算法+数据读取+多倍交叉验证实现
- springboot笔记整理(超详细,手把手教程!)
- UTRAN Iub接口介绍
- Galaxy数据统计平台(一)
- CSS实现文字动画炫酷效果
- SQL Server - sql 空间数据
热门文章
- ecu故障现象_650NK一代因ECU故障后更换节气门(新ECU后续问题处理见6楼) - 春风动力 - 摩托车论坛 - 中国摩托迷网 将摩旅进行到底!...
- 小米5 Android 8.0解bl,小米解BL锁超详细的图文教程
- PCB模块化设计07——Micro SD卡/TF卡PCB布局布线设计规范
- 【经验】深度强化学习训练与调参技巧
- 【小技巧】Google chrome首页被桔梗网恶意劫持的解决方法
- MsgPack的浅浅理解
- 计算机本地用户和组系统管理员,【判断题】你是一台Windows Server 2008计算机的系统管理员,你可以使用本地用户和组工具来管理该计算机中的组账号。...
- 全国计算机技术与软件专业技术资格(水平)考试2022 年下半年网络规划设计师下午试卷Ⅰ
- NDOWS玻璃膜,【小米平板2开箱体验】屏幕|内存_摘要频道_什么值得买
- 『杭电1411』校庆神秘建筑