【Java学习】抽象类、继承(发红包案例)

抽象类

抽象类:抽象发法所在的类,必须是抽象类才行,在class之前写上abstract即可
抽象方法
如果父类当中的方法不确定如何进行{}方法实现,那么这就是一个抽象方法
抽象方法:加上abstract关键字,然后去掉大括号,直接分号结束

如何使用抽象类和抽象方法:

1.不能直接创建new对象
2.必须用一个子类来继承抽象父类
3.子类必须覆盖重写抽象父类当中所以的抽象方法 覆盖重写:子类去掉抽象方法的abstract关键字,然后补上方法体大括号
4.创建子类对象进行使用

注意事项:
1.抽象类不能创建对象,如果要创建,编译无法通过而报错,只能创建其非抽象子类的对象
2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的
3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必须是抽象类
4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过,除非子类也是抽象类

群主发红包案例

发红包的逻辑:
返回值类型:ArrayList< Integer >
方法名称: send
参数列表:
1.总共发多少钱 int totalMoney
2.分成多少份 int count

public ArrayList<Integer> send(int totalMoney,int count){
    // ...
}

收红包的逻辑
返回值类型: void
方法名称:receive
参数列表: ArrayList

public void receive(ArrayList <Integer>){
    // ...
}

代码实现

用户类

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("我叫" + 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;
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> list){
        // 从多个红包当中随便抽取一个
        // 随机获取一个集合当中的索引编号
        int index = new Random().nextInt(list.size());
        //根据索引,从集合当中删除,并且得到被删除的红包,给自己
        int delta = list.remove(index);
        // 当前成员自己本来有多少钱
        int money = super.getMoney();
        // 加上钱,重新设置回去
        super.setMoney(money + delta);
    }
}

群主类

import java.util.ArrayList;
// 群主的类
public class Manager extends User {
    public Manager() {
    }

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

    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);
        }

        int last = avg + mod;
        redList.add(last);

        return redList;
    }

}

主函数

import java.util.ArrayList;

public class MainRedPacket {

    public static void main(String[] args) {

        Manager manager = new Manager("群主", 100);

        Member one = new Member("成员A", 0);
        Member two = new Member("成员B", 0);
        Member three = new Member("成员C", 0);

        manager.show();
        one.show();
        two.show();
        three.show();
        System.out.println("==================");

        // 群主发20块钱,分三个红包
        ArrayList<Integer> redList = manager.send(20, 3);

        one.receive(redList);
        two.receive(redList);
        three.receive(redList);

        manager.show();
        one.show();
        two.show();
        three.show();

    }
}

运行结果:
在这里插入图片描述

发布了19 篇原创文章 · 获赞 20 · 访问量 732

猜你喜欢

转载自blog.csdn.net/sy140823/article/details/104642039