Java类的继承项目实践:发红包

本文适用于学习完类继承找小demo练习的选手。

如有错误还请指正。

1.写在前面

对继承类操作的复习,并对项目进行总结。

2.项目结构编写

项目目标

由群主发红包,群员抢红包。需要能设定发红包的个数和金额,并且能通过执行方法知道任意成员当前所拥有的金额。

this、super关键字的总结

在继承开始之前,得先了解this和super关键字。

super关键字有三种用法

1.在子类成员方法中,访问父类成员变量

2.在子类成员方法中,访问父类成员方法

3.在子类构造方法中,访问父类构造方法

注:在构造方法中默认有一个super()方法(不传参!)

注:3中super(…)必须为第一个语句

this关键字有三种用法

1.在本类成员方法中,访问本类成员变量

2.在本类成员方法中,访问本类成员方法(this可省略)

3.在本类构造方法中,访问本类构造方法

注:3中this(…)必须为第一个语句

所以this和super不能同时使用,即写下this时,默认的super方法将不再赠送

但有另外一种情况

class A extends B {

public A(int i){

this.A();

}

public A(){

// 此处的super();依旧赠送

}

}

类的结构

父类

类名:User

public class User {

private String name;

private double money;

public User(String name, double money){

this.name = name;

this.money = money;

}

public void setName(String name){

this.name = name;

}

public String getName(){

return name;

}

public void setMoney(double money){

this.money = money;

}

public double getMoney(){

return money;

}

public void show(){

System.out.println(this.name + "还有" + money + "元");

}

}

Java类的继承项目实践:发红包

子类1

类名:Manager

import java.util.ArrayList;

import java.util.Random;

import static java.lang.Math.floor;

public class Manager extends User {

public Manager(String name, double money){

super(name, money);

}

public ArrayList<double> send(double totalMoney, int count){/<double>

ArrayList<double> list = new ArrayList<>();/<double>

if(totalMoney > super.getMoney()){

System.out.println("余额不足");

return list;

}

for(int i = 0; i < count - 1; i++){

Random r = new Random();

double pkg = floor(r.nextDouble()*0.5*totalMoney*100)/100;

list.add(pkg);

totalMoney -= pkg;

}

list.add(totalMoney);

return list;

}

}

子类2

类名:Member

import java.util.ArrayList;

import java.util.Random;

public class Member extends User {

public Member(String name, double money){

super(name, money);

}

public void receive(ArrayList<double> list){/<double>

int index = new Random().nextInt(list.size());

double catchMoney = list.remove(index);

System.out.println(super.getName() + "抢到了" + catchMoney + "元");

super.setMoney(catchMoney + super.getMoney());

}

}

3.主方法的编写

import java.util.ArrayList;

public class Red_Package{

public static void main(String[] args){

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

Member one = new Member("one", 0);

Member two = new Member("two", 0);

Member three = new Member("three", 0);

manager.show();

one.show();

two.show();

three.show();

ArrayList<double> list = manager.send(50, 3);/<double>

one.receive(list);

two.receive(list);

three.receive(list);

manager.show();

one.show();

two.show();

three.show();

}

}

4.项目总结

1.在运行中可能会出现结果为例如抢到红包的钱数为1.00000000003的情况,初步猜测系double类型精度问题导致,暂未考证。

2.当群主发红包钱数大于当前持有钱数,在输出"余额不足"后会终止程序运行,暂未想出解决方法。

Java类的继承项目实践:发红包



分享到:


相關文章: