【技术向】学习Java的微项目之发红包 与 USB接口
发红包微项目,主要的技术点有两点,一个是使用抽象类,一个是使用数组(ArrayList是一个数组,本文中使用链表效率会更高)存储红包,再者就是对于方法的定义过程了。
抽象类是User,两个子类是群主和群员,使用ArrayList存储红包,群主的发红包方法接收金钱数和红包数两个参数,返回ArrayList存储红包。群员的收红包方法接收ArrayList作为参数,没有返回值。
==================== User类代码:=============================
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; /** * Created by 123 on 2020.3.15. */ public class QunZhu extends User { public QunZhu() { } public QunZhu(String name, int money) { super(name, money); } public ArrayList<Integer> send(int totalNum, int packageNum){ ArrayList<Integer> list=new ArrayList<>(); if(totalNum>super.getMoney()){ return list; } int avg=totalNum/packageNum; int left=totalNum%packageNum; int currentMoney=super.getMoney()-totalNum; super.setMoney(currentMoney); for (int i = 0; i < packageNum-1; i++) { list.add(avg); } int last=avg+left; list.add(last); return list; } }
========================= 群员类代码:===========================
import java.util.ArrayList; import java.util.Random; /** * Created by 123 on 2020.3.15. */ public class QunYuan extends User { public QunYuan() { } public QunYuan(String name, int money) { super(name, money); } public void receive(ArrayList<Integer> list){ Random r=new Random(); int index= r.nextInt(list.size()); int num=list.get(index); int currentMoney=super.getMoney()+num; super.setMoney(currentMoney); list.remove(index); } }
========================= 最终使用代码:===========================
import java.util.ArrayList; /** * Created by 123 on 2020.3.15. */ public class Demo { public static void main(String[] args) { QunZhu a=new QunZhu("王",100); QunYuan b=new QunYuan("A",0); QunYuan c=new QunYuan("B",0); a.show(); b.show(); c.show(); System.out.println("==="); ArrayList<Integer> list=a.send(20,3); b.receive(list); c.receive(list); a.show(); b.show(); c.show(); } }
最终输出:
我叫王,我有100块。 我叫A,我有0块。 我叫B,我有0块。 === 我叫王,我有80块。 我叫A,我有6块。 我叫B,我有6块。
而USB微项目,是一个应用接口的微项目。其中USB是一个接口,键盘和鼠标都是该接口的实现类,而电脑包含有一个方法,传入参数是USB接口基类,该方法可以根据传入参数,即设备(接口基类USB的子类)的不同实现不同方法。需要注意的是,既可以调用实现类中覆盖重写的接口的方法,又可以调用实现类中新创建的方法。
========================== USB抽象接口:==========================
public interface USB { public abstract void open(); public abstract void close(); }
========================== 键盘类:================================
public class KeyBroad implements USB { @Override public void open() { System.out.println("打开键盘"); } @Override public void close() { System.out.println("关闭键盘"); } public void input(){ System.out.println("键盘输入"); } }
=========================== 鼠标类: ==============================
public class Mouse implements USB { @Override public void open() { System.out.println("打开鼠标"); } @Override public void close() { System.out.println("关闭鼠标"); } public void click(){ System.out.println("点击鼠标"); } }
=========================== 电脑类: ==============================
public class Computer { public void open(){ System.out.println("开机"); } public void close(){ System.out.println("关机"); } public void useUSB(USB usb){ usb.open(); usb.close(); } }
============================== 调用类:============================
public class demo05 { public static void main(String[] args) { Computer com=new Computer(); com.open(); USB usb=new Mouse(); com.useUSB(usb); KeyBroad keyboard=new KeyBroad(); com.useUSB(keyboard); method(usb); com.close(); } public static void method(USB usb){ if(usb instanceof Mouse){ Mouse mouse=(Mouse) usb; mouse.click(); }else if(usb instanceof KeyBroad){ KeyBroad keybroad=(KeyBroad) usb; keybroad.input(); } } }
=========================== 显示结果: ============================
开机
打开鼠标
关闭鼠标
打开键盘
关闭键盘
点击鼠标
关机

浙公网安备 33010602011771号