JAVA —— abstract抽象类(综合练习题)

抽象类:抽象方法所在的类,必须是抽象类,在class之前写上abstract即可。

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

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

习题一:群主发普通红包,群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取;成员领取完红包,保存到成员余额中。

import java.util.ArrayList;
import java.util.Random;

//定义用户类
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 + "\t余额:" + 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;
    }
}

//群主的类
class Manager extends User{
    public Manager() {
    }

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

//发红包功能
    public ArrayList<Integer>send(int total, int count) {
        ArrayList<Integer> list = new ArrayList<>();                //用来存储若干个红包金额

        int left = super.getMoney();                                //获得自身钱包的余额
        if (left < total) {                                         //判断余额是否满足所要发送红包的金额
            System.out.println("余额不足!");
            return list;
        }

        super.setMoney(left - total);                               //修改剩余钱包的余额

        int avg = total / count;                                    //将金额分成若干等分的红包
        int mod = total % count;                                    //如果除不尽则取出除不尽的那部分

        for (int i = 0; i < count-1; i++) {                         //遍历将红包放入集合
            list.add(avg);
        }

        int last = avg + mod;                                       //将除不尽的那部分放入最后一个红包中
        list.add(last);

        return list;                                                //返回集合
    }
}    

//普通成员类
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);                                //重新设置获得红包后的金额

    }
}

public class Main {
    public static void main(String[] args) {
        Manager manager = new Manager("群主",100);

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

        manager.show();
        A.show();
        B.show();
        C.show();
        System.out.println("================");

        ArrayList<Integer> list = manager.send(20,3);

        A.receive(list);
        B.receive(list);
        C.receive(list);

        manager.show();
        A.show();
        B.show();
        C.show();

    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走丢的男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值