抢红包案例
package com.claire.day08.redbag;
public class User {
private String username; // 用户名
private double leftMoney; // 余额
public User() {
}
public User(String username, double leftMoney) {
this.username = username;
this.leftMoney = leftMoney;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public double getLeftMoney() {
return leftMoney;
}
public void setLeftMoney(double leftMoney) {
this.leftMoney = leftMoney;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", leftMoney=" + leftMoney +
'}';
}
}
package com.claire.day08.redbag;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Random;
public class Member extends User{
public Member() {
}
public Member(String username, double leftMoney) {
super(username, leftMoney);
}
// 开红包
public void open(ArrayList<Double> list){
Random random = new Random();
int index = random.nextInt(list.size());
Double money = list.remove(index);
this.setLeftMoney(money+this.getLeftMoney());
}
}
package com.claire.day08.redbag;
import java.util.ArrayList;
public class QunZhu extends User{
public QunZhu() {
}
public QunZhu(String username, double leftMoney) {
super(username, leftMoney);
}
// 发红包
public ArrayList<Double> send(int money, int count){
// 判断
double leftMoney = this.getLeftMoney();
if(money > leftMoney)
return null;
// 更新群主的余额
this.setLeftMoney(leftMoney-money);
// 变成分
money *= 100;
// 每一份的金额 分
int m = money/count;
// 求余数
int l = money%count;
ArrayList<Double> list = new ArrayList<>();
for (int i = 0; i < count-1; i++) {
list.add(m/100.0);
}
if (l == 0)
list.add(m/100.0);
else
list.add((m+l)/100.0); // 不能整除
return list;
}
}
测试
package com.claire.day08.redbag;
import java.util.ArrayList;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
QunZhu qunzhu = new QunZhu("马云", 200);
ArrayList<Double> list = qunzhu.send(100, 3);
System.out.println(list);
Member member1 = new Member("张三", 10);
Member member2 = new Member("李四", 5);
Member member3 = new Member("王五", 2000);
member1.open(list);
member2.open(list);
member3.open(list);
System.out.println(qunzhu);
System.out.println(member1);
System.out.println(member2);
System.out.println(member3);
}
}
接口
接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK7及以前),默认方法和静态方法(JDK8),私有方法(JDK9)
接口的定义,它与定义类方式相似,但是不是类,而是另外一种引用数据类型接口的使用,它不能创建对象,但是可以被实现(implements,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。
版本定义示例
package com.claire.day08.demo;
public interface Demo {
// 抽象方法 包含抽象方法(JDK7及以前)
public abstract void method1();
// 默认方法 ,默认方法和静态方法(JDK8)
public default void method2(){
System.out.println("哈哈");
}
// 静态方法
public static void method3(){
System.out.println("哈哈");
}
// 私有方法 (JDK9)
private void method4(){
}
}
类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用implements关键字。
非抽象子类实现接口:
1.
必须重写接口中所有抽象方法。
2.
继承了接口的默认方法,即可以直接调用,也可以重写。
示例
public interface LiveAble {
public void eat();
public void sleep();
}
public abstract class Animal implements LiveAble{
private String name;
public void drink(){
System.out.println("喝水中");
}
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("小猫在喵喵的吃");
}
@Override
public void sleep() {
System.out.println("小猫在安静的睡");
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
cat.sleep();
cat.drink();
}
}