抽象类可以创建对象吗_【基础篇】java-抽象类与继承的补充
##抽象类##
- 概述
在继承和多态时,讲到了父类的方法多数时候,是要被子类们重写,且各自的实现不尽相同。那么对于父类来说,其方法声明还有用,方法体就没用了,这样在父类中,就只保留方法的声明和空的方法体。这种没有方法体的方法称为抽象方法。java语言规定,包含抽象方法的类就是抽象类。
- abstract关键字
使用abstract关键字修饰抽象类以及抽象方法,例如:
public abstract class Animal {
public abstract void run();
}
- 抽象类的使用规定
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父
类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。
1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
这些也好理解,首先定义抽象类,目的就是不想让创建该类对象,只需要对子类创建对象即可,而子类在创建对象的时候,要先初始化父类,所以抽象类是可以有构造方法的,子类是可以生成对象的,所以就不能包含抽象方法,所以类中要对父类的抽象方法全部进行重写覆盖。
# 继承的综合案例 #
- 需求分析:
群主发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则:
1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2. 成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
-案例分析
一个父类user,两个成员变量username与money,一个成员方法show;子类一群主,自定义方法发红包;子类二成员类,自定义方法收红包;
-案例实现
定义用户类
public class User{private String suername;private double money;public User(){}public User(String username,double money){this.username = username;this.money = money;}public String getUsername(){return username;}public String setUsername(String username){this.username = username;}public String getMoney(){return money;}public String setMoney(double money){this.money = money;}public void show(){System.out,println("用户名:"+username+",余额为:"+money+"元");}
}
定义群主类
public class QunZhu extenmds User{public QunZhu(){}public QunZhu(String username,double money){super(username, leftMoney);}/*
群主发红包,就是把一个整数的金额,分层若干等份。
1.获取群主余额,是否够发红包.
不能则返回null,并提示.
能则继续.
2.修改群主余额.
3.拆分红包.
3.1.如果能整除,那么就平均分。
3.2.如果不能整除,那么就把余数分给最后一份。
*/
public ArrayList<Double> send(jint money,int count){double leftMoney = getMoney();if(money>leftMoney){return null;}setMoney(leftMoney - money);ArrayList<Double> list = new ArrayList<>();money = money * 100;// 每份的金额int m = money / count;// 不能整除的余数int l = money % count;// 无论是否整除,n‐1份,都是每份的等额金额 for(inti=0;i<count‐1;i++){// 缩小100倍,折算成 '元' list.add(m/100.0);}// 判断是否整除 if(l==0){// 能整除, 最后一份金额,与之前每份金额一致 list.add(m/100.0);}else{// 不能整除, 最后一份的金额,是之前每份金额+余数金额 list.add((m+l)/100.00);}// 返回集合 return list;}
}
定义成员类
public class Member extends User {public Member() {}public Member(String username, double leftMoney) {super(username, leftMoney);}// 打开红包,就是从集合中,随机取出一份,保存到自己的余额中public void openHongbao(ArrayList<Double> list) {// 创建Random对象 Random r = new Random(); // 随机生成一个角标 int index = r.nextInt(list.size()); // 移除一个金额Double money = list.remove(index);// 直接调用父类方法,设置到余额 setMoney(money);}
}
定义测试类:
public class Test {public static void main(String[] args) {// 创建一个群主对象QunZhu qz = new QunZhu("群主" , 200);// 创建一个键盘录入 Scanner sc = new Scanner(); System.out.println("请输入金额:");int money = sc.nextInt();System.out.println("请输入个数:");int count = sc.nextInt();// 发送红包 ArrayList<Double> sendList = qz.send(money,count);// 判断,如果余额不足if(sendList == null){System.out.println(" 余额不足...");return;}// 创建三个成员Member m = new Member();Member m2 = new Member();Member m3 = new Member();// 打开红包 m.openHongbao(sendList);m2.openHongbao(sendList);m3.openHongbao(sendList);
// 展示信息 qz.show();m.show();m2.show();m3.show();}
}
抽象类可以创建对象吗_【基础篇】java-抽象类与继承的补充相关推荐
- java抽象类的属性_深入理解Java抽象类
基础部分内容差不多讲解完了,今天开始进入Java提高篇部分,这部分内容会比之前的内容复杂很多,希望大家做好心理准备,看不懂的部分可以多看两遍,仍不理解的部分那一定是我讲的不够生动,记得留言提醒我. 好 ...
- Lunx运维监控_shark巨菜_基础篇
Lunx运维监控_shark巨菜_基础篇 一.监控重要性 单单从"监控"两个字来谈,范围之广可以涵盖我们生活的方方面面,我们生活和工作中处处可见视频监控的摄像机:机房中的电压电流监 ...
- C++基础篇之抽象类的接口
C++基础篇之抽象类的接口 接口描述了类的行为和功能,而不需要完成类的特定实现. C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念. 如果类 ...
- Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)
Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...
- Java基础篇--Java 数组
Java基础篇--Java 数组 Java 数组 声明数组变量 创建数组 处理数组 For-Each 循环 数组作为函数的参数 数组作为函数的返回值 多维数组 多维数组的动态初始化(以二维数组为例) ...
- JavaSE基础篇--Java SE语法02--基本语法
JavaSE基础篇 Java SE语法02 HelloWorld 基本语法 流程控制 方法 数组 基本语法 标识符 关键字 数据类型 运算符 数据类型转换 运算后结果的数据类型 Java SE语法02 ...
- 东华大学2020考研计算机复试准备上机题解析答案_基础篇 前言
东华2020考研复试准备上机题解析答案_基础篇 前言 大家好,我是今年参加东华大学研究生入学考试的学生,前不久东华大学发布了关于复试上机的通知,还有题库供大家练习.我于是刷完了所有的题目,并且把题目和 ...
- 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)-----(八)低功耗模式补充
疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (八)低功耗模式补充 如果MSP430处于低功耗模式的工作状态,当可屏蔽中断和非可屏蔽中断源产生时,就会唤醒CPU进入中断处理程序. 入栈保护当 ...
- Java综合知识总结_基础篇
Java 一.JDK常用的包 java.lang: 这个是系统的基础类,比如String.Math.Integer.System和Thread, 提供常用功能. java.io: 这里面是所有输入输出 ...
最新文章
- 混合粒子群算法原理通俗讲解
- 爬虫学习笔记(二十三)—— Appium+Mitmproxy
- 为什么一定要好好睡觉?
- IIC总线的原理与Verilog实现
- JavaScript实现clearBit清除位算法(附完整源码)
- Pandas与openpyxl库的 完美 融合!
- 正则表达式及测试工具
- HTTP劫持 方面了解和学习
- nodewebkitV0.21.6版本的学习
- Python基本数据类型之字典
- 计算机组成原理第一章练习题(答案详解)
- java爬虫 抓取国家统计局:统计用区划代码和城乡划分代码(抓取省市区镇县办事处村委会数据)生成json
- 软件集成测试分析,软件集成测试报告模板
- 关于LIS系统与HIS系统的接口方案
- 变邻域搜索(VNS)原理梳理和应用细节-附求解VRPTW问题C++代码
- OpenStack 运维 - 环境部署 | 报错排查 [T版]
- python3报错: takes 1 positional argument but 2 were given 问题解决。
- 可长时间佩戴的耳机真的存在吗?骨传导耳机是否对耳朵伤害更小?
- 关于c++中的一个母牛生小牛的问题详细解答与体会
- PostgreSQL分区
热门文章
- 关于CRM AET table extension是否能够在S4CRM继续使用的问题
- 如何使用Angular的@Input()装饰器
- build.gradle里repositories的mavenCentral实现原理解析
- SAP C4C - the entity BO node XXXX is unknown
- 在SAP C4C TI(Thing Inspector)页面里添加自定义UI
- SAP UI5 busy Dialog debug
- 为什么我开发的SAP UI5应用里的group by 功能不工作?
- why I cannot set SAP UI5 dropdown list as not selected
- SAP Material type mapping
- UI5 setBusyIndicatorDelay