例题描述
发红包项目,针对继承的案例
群主发普通红包:
1.群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2.成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,完成发红包的操作。
例题分析
由题意可知,
关于类,有两个类,一个是群主类,一个是成员类。他们如果想要完成发红包这个动作,可以有两个重复的成员变量,姓名与余额。这时我们可以给她两写一个父类,进而用它们各自继承成员变量即可,优化了程序。
关于方法,对于他们自身来说,群主需要一个发红包的方法,成员需要一个接受红包的方法。
例题实践
一共四个类,父类User,子类Manager与Person,以及Main方法所在的类。其中包含了继承,匿名对象,JavaBean,ArrayList类的使用。大家有复习继承相关知识的话,可以拿它练练每一步的解析都有写哦,哈哈。
package demo03;
发红包项目,针对继承的案例
群主发普通红包:
1.群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2.成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,完成发红包的操作。
* */
public class User {
private String name;
private int money;
//无参构造
public User() {
}
//有参构造
public User(String name, int money) {
this.name = name;
this.money = money;
}
public void show(){
System.out.println("你的姓名是:" + this.name + "你的余额为:" + this.money);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
package demo03;
import java.util.ArrayList;
public class Manager extends User{
public Manager(){
}
public Manager(String name,int money){
super(name,money);
}
//参数1:你总共要发多少钱 ,参数2:你要发多少个包
public ArrayList<Integer> send(int totalMoney,int count){
//首先需要一个集合,用来存储若干红包里的金钱
ArrayList<Integer> redList = new ArrayList<>();
//首先看一下群主自己有多少钱
int leftMoney = super.getMoney();
if(totalMoney > leftMoney){
System.out.println("余额不足!");
return redList;
}
//扣钱,并重新计算余额
super.setMoney(leftMoney - totalMoney);
//发红包需要平均拆分成count份
int avg = totalMoney / count;
int mod = totalMoney % count;//红包全部取整,但是分的红包数量每份不一定完全分平均,会有余数
//把除不开的余数放在最后一个红包当中
//然后把红包载入集合
for (int i = 0; i < count - 1 ; i++) {//把平均分好的钱装在集合里
redList.add(avg);
}
redList.add(avg + mod);//最后一个红包
return redList;
}
}
package demo03;
import java.util.ArrayList;
import java.util.Random;
public class Person extends User{
Person(){
}
public Person(String name, int money) {
super(name, money);
}
//收红包的方法
public void receive(ArrayList<Integer> list){
//从若干红包中抽取一个给我
//从集合中随机获取一个索引,抽出索引位置的红包
int index = new Random().nextInt(list.size());
//根据索引,从集合中删除红包,得到被删除的红包
int get = list.remove(index);
//得到红包后,加入到个人总余额里
int pMoney = super.getMoney();
super.setMoney(pMoney + get);
//红包到账
}
}
package demo03;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Manager man = new Manager("群主",200);
Person per1 = new Person("小王",0);
Person per2 = new Person("小红",0);
Person per3 = new Person("小李",0);
Person per4 = new Person("小金",0);
//展示基本信息
man.show();
per1.show();
per2.show();
per3.show();
per4.show();
//群主大气,群主要发红包啦!
ArrayList<Integer> red = man.send(110,4);
per1.receive(red);
per2.receive(red);
per3.receive(red);
per4.receive(red);
//大家现在的信息是
man.show();
per1.show();
per2.show();
per3.show();
per4.show();
}
}