Java红包案例

(如有问题,欢迎各位大佬批评指正)

Java发红包案例(继承的应用)

特点

  1. 子类可以拥有父类的内容
  2. 子类还可以有自己的专属内容
  3. 子类就是一个父类(子类也可以被当做父类看待)

super关键字

  1. 子类构造方法中有一个默认隐含的**super()**调用,所以一定是先调用父类的构造,然后执行子类的构造
  2. 子类构造可以通过super关键字来调用父类的构造
  3. 使用super调用父类的构造方法时,super语句必须是子类构造方法的第一个语句
super关键字的使用
  1. 在子类的成员方法中,访问父类的成员变量
  2. 在子类的成员方法中,访问父类的成员方法
  3. 在子类的构造方法中,访问父类的构造方法

红包案例

分析
  1. 首先在一个群里面群主进行分发红包
  2. 普通成员收红包
  3. 群主和普通成员都是群成员
首先根据分析我们可以创建一个群成员类(User)
public class User {
    String name;//姓名
    int money;//余额

    public User() {
    }

    public User(String name, int money) {
        this.name = name;
        this.money = money;
    }
    //定义一个方法用来展示姓名和余额
    public void show() {
        System.out.println("姓名:" + name + ",余额:" + 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;
    }
}
创建一个群主类
import java.util.ArrayList;

public class Manager extends User {
    public Manager () {

    }
    //从父类继承过来的构造方法
    public Manager(String name, int money) {
        super(name, money);
    }
    //需要一个集合用来储存红包
    ArrayList<Integer> redList  = new ArrayList<Integer>();
    //拿到群主余额
    int leftMoney = super.getMoney();
    //发送包 sendMoney是要发的钱,cout是分成几个红包
    public ArrayList<Integer> send (int sendMoney, int count){
        //把余额放到集合中
        //判断红包金额是否大于余额
        if (leftMoney - sendMoney < 0) {
            System.out.println("余额不足");
            return redList;
        }
        int avg = sendMoney / count;
        //把金额平均放进集合中
        for (int i = 0; i < count - 1; i++) {
            redList.add(avg);
        }
        //定义mod保存余数
        int mod = sendMoney % count;
        //把余数放到一个红包内
        int last = avg + mod;
        redList.add(last);
        //群主剩余的钱
        super.setMoney(leftMoney - sendMoney);
        return redList;
    }
}

创建普通成员类
import java.util.ArrayList;
import java.util.Random;

public class Member extends User {
    public Member() {

    }

    public Member(String name, int money) {
        super(name, money);
    }

    //收红包
    public void receive(ArrayList<Integer> redList){
        //随机抽取一个红包给自己,随机获取其中的集合编号
        //我们使用Random获取集合的编号,集合的长度就是随机数的范围
        int index = new Random().nextInt(redList.size());
        //remove方法根据索引移除并返回该移除的对象
        int delta = resList.remove(index);
        //原先有多少钱
        int money = super.getMoney();
        //最终的余额
        super.setMoney((money + delta));
    }

}

准备好之后我们可以试一下效果
import java.util.ArrayList;
public class Demo01 {
    public static void main(String[] args) {
        //创建一个群主
        Manager manager = new Manager("群主", 100);
        //创建群成员
        Member one = new Member("张三", 0);
        Member tow = new Member("李四", 0);
        Member three = new Member("王五", 0);
		//发红包之前各个成员的余额
        manager.show();
        one.show();
        tow.show();
        three.show();
        System.out.println("------------");
		//群主发红包
        ArrayList<Integer> redList = manager.send(20, 3)
        //成员收红包
        one.receive(redList);
        tow.receive(redList);
        three.receive(redList);

        System.out.println("------------");
        //红包之后各个成员的余额
        manager.show();
        one.show();
        tow.show();
        three.show();

    }
}

最终结果如下
结果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值