基础第一阶段day09——发红包案例

本文通过一个发红包的案例,探讨了Java中父子类继承的概念。首先定义了一个用户类,然后创建了群主类和群员类,这两个类都继承自用户类。在测试类中对这些类进行了操作,并分享了注意事项,包括成员变量的私有化及其对子类构造的影响。
摘要由CSDN通过智能技术生成

定义一个用户类

public class User {
    private String name;
    private int money;

    public User() {

    }

    public User(String name, int money) {
        this.name = name;
        this.money = 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;
    }

    public void show() {
        System.out.println("我叫" + name + ",有" + money + "元");
    }
}

定义一个群主类,继承用户类

public class Manager extends User {
    public Manager() {
    }

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

    public ArrayList<Integer> prepare(int giveMoney, int count) {
        ArrayList<Integer> arrayList = new ArrayList<>();

        int haveMoney = getMoney();
//前面可以加上一个super , super.getMoney()
        if (haveMoney < giveMoney) {
            System.out.println("余额不足,请重新输入!");
            return arrayList;
        }
        setMoney(haveMoney - giveMoney);
//前面可以加上一个super , super.setMoney(haveMoney - giveMoney)
        int avg = giveMoney / count;
        int mod = giveMoney % count;

        for (int i = 0; i < count; i++) {
            if (i == count - 1) {
                arrayList.add(avg + mod);
            } else {
                arrayList.add(avg);
            }
        }
        return arrayList;
    }
}

定义一个群员类,继承用户类

public class Member extends User {
    public Member() {
    }

    public Member(String name, int money) {
        super(name, money);
    }
    public  void receive(ArrayList<Integer>arrayList){
        int haveMoney = getMoney();
//前面可以加上一个super 
        int num = new Random().nextInt(arrayList.size());
        Integer getMoney = arrayList.remove(num);
        setMoney(haveMoney+getMoney);
//前面可以加上一个super  
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        Manager manager = new Manager("夏萤", 10000);
        Member member1 = new Member("程文林", 5000);
        Member member2 = new Member("丁昊", 0);
        Member member3 = new Member("李友峰", 0);
        manager.show();
        member1.show();
        member2.show();
        member3.show();
        System.out.println("============");
        ArrayList<Integer> arr = manager.prepare(5000, 3);
        member1.receive(arr);
        member2.receive(arr);
        member3.receive(arr);
        manager.show();
        member1.show();
        member2.show();
        member3.show();
    }
}

测试结果

我叫夏萤,有10000元
我叫程文林,有5000元
我叫丁昊,有0元
我叫李友峰,有0元
============
我叫夏萤,有5000元
我叫程文林,有6666元
我叫丁昊,有1666元
我叫李友峰,有1668元

========================================================================================================================================================

注意事项

(1)第一个:当User类的成员变量没有被私有化时,他的子类如Member类该怎么构造

public class User {
    private String name;
    int money;
    //空参
    //全参
    //get方法
    //set方法
}
public class Manager extends User {
    public Manager() {
        //默认有一个super()构造
    }

    public Manager(String name, int money) {
    //默认的super()无法赋值,需要重载的super构造或者其他
    
        //第一种写法
        super(name, money);

		//第二种写法  
        this.name = name;
        this. money = money;

		//第三种写法(父类没有私有成员却依然写了该成员的getset方法时)
        super.setName(name);
        setMoney(money);//super可以省略不写,因为没有重复的,不会产生冲突
    }
}

(2)第二个:当User类的成员变量被私有化时,他的子类如Member类该怎么构造

public class User {
    private String name;
    private int money;
    //空参
    //全参
    //get方法
    //set方法
}
public class Manager extends User {
    public Manager() {
    	//默认有一个super()构造
    }

    public Manager(String name, int money) {
    //默认的super()无法赋值,需要重载的super构造或者其他

 		//第一种写法
        super(name, money);

		// //第二种写法
        super.setName(name);
        setMoney(money);//super可以省略不写,因为没有重复的,不会产生冲突
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值