目录

一、抽象类概述

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)附加油站充卡案例相关推荐

  1. java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  2. Java抽象类(Abstract Class)与接口(Interface)区别

    抽象类与接口比较 抽象类跟接口类似,都不能实例化,可能包含不需实现方法或已实现的方法. 抽象类可以定义一些不是静态或常量的字段,定义 public, protected, private访问级别的具体 ...

  3. 晋南讲堂之Java抽象类(abstract)与接口(interface)区分

    抽象类(abstract)和接口(interface)的对比 1. 抽象类(abstract)   我们一般声明一个抽象类按照如下形式: abstract class ClassName{//成员变量 ...

  4. JAVA抽象类——abstract

    1. 抽象方法 如果父类中一定含有某个方法,但如何实现并不能确定,这就应该是一个抽象方法. 如父类是图形,方法是计算图形的面积,因为每一种图形都有不同的面积计算公式,所以如何计算图形的面积不能确定,那 ...

  5. java抽象类_Java抽象类

    java抽象类 Abstract class in Java is similar to interface except that it can contain default method imp ...

  6. Java接口和Java抽象类(转,原文已被删除)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  7. Java抽象类(abstract)、final关键字

    抽象类 (abstract) 抽象类的特点: 抽象类为继承而生 抽象方法不能有代码体 子类要想继承父类 就必须要重写父类的全部抽象方法 Father.java public abstract clas ...

  8. Java中抽象类 abstract和interface的区别

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...

  9. Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)

    Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...

最新文章

  1. python excel xldr xlwt xlutils 使用简介
  2. 机器学习奠基人Michael Jordan:下代技术是融合经济学,解读2项重要进展
  3. php 生成等比例缩略图,PHP等比例生成缩略图
  4. NLP深度学习:近期趋势概述 1
  5. 机器学习(4.文本数据的特征抽取(第二种TfidfVectorizer(TF-IDF)))
  6. mybatis 插件原理
  7. 如何解决90%的报表设计难题?300张报表模板任君挑选
  8. spring roo_使用Spring Roo进行概念验证
  9. 有意思的逻辑思维题(一)(hdu2018,2160,2053)
  10. 用poi-3.6-20091214.jar 实现java给excel资料加密
  11. 欧拉函数知识点总结及欧拉函数打表代码(数论)
  12. java 求两点的角度_计算两点之间的角度 – java
  13. wake on lan 实现远程开机(远程开关机程序)
  14. 宝塔面板防火墙安装和使用教程详解
  15. 支持向量机算法+数据读取+多倍交叉验证实现
  16. springboot笔记整理(超详细,手把手教程!)
  17. UTRAN Iub接口介绍
  18. Galaxy数据统计平台(一)
  19. CSS实现文字动画炫酷效果
  20. SQL Server - sql 空间数据

热门文章

  1. ecu故障现象_650NK一代因ECU故障后更换节气门(新ECU后续问题处理见6楼) - 春风动力 - 摩托车论坛 - 中国摩托迷网 将摩旅进行到底!...
  2. 小米5 Android 8.0解bl,小米解BL锁超详细的图文教程
  3. PCB模块化设计07——Micro SD卡/TF卡PCB布局布线设计规范
  4. 【经验】深度强化学习训练与调参技巧
  5. 【小技巧】Google chrome首页被桔梗网恶意劫持的解决方法
  6. MsgPack的浅浅理解
  7. 计算机本地用户和组系统管理员,【判断题】你是一台Windows Server 2008计算机的系统管理员,你可以使用本地用户和组工具来管理该计算机中的组账号。...
  8. 全国计算机技术与软件专业技术资格(水平)考试2022 年下半年网络规划设计师下午试卷Ⅰ
  9. NDOWS玻璃膜,【小米平板2开箱体验】屏幕|内存_摘要频道_什么值得买
  10. 『杭电1411』校庆神秘建筑