本文适用于学习完类继承找小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 + "元");
}
}
子类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.当群主发红包钱数大于当前持有钱数,在输出"余额不足"后会终止程序运行,暂未想出解决方法。
閱讀更多 架構師公社 的文章