想了解更多请查看java学习(idea版)
目录
抽象类定义
- 没有方法主体的方法称为抽象方法
- Java语法规定,包含抽象方法的类一定是抽象类,在class之前写上abstract即可
如何使用抽象类和抽象方法:
- 1. 不能直接创建new抽象类对象。必须用一个子类来继承抽象父类
- 2. 抽象类中可以有抽象方法和成员方法、构造方法,抽象方法没有方法体
- 3. 子类必须覆盖重写抽象父类当中所有的抽象方法。(当子类是抽象类时,抽象的父类可以选择性覆盖重写抽象方法)
- 4 . 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
一个抽象类不一定含有抽象方法,只要保证抽象方法所在的类是抽象类即可。
列:抽象类练习
列:当子类是抽象类时
public abstract class Animal {
public abstract void eat();
}
public abstract class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗都喜欢吃屎");
}
}
public class MyDog extends Dog {
@Override
public void eat() {
super.eat();
System.out.println("我的狗不喜欢吃屎");
}
}
列:发红包案例
抽象父类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 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;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", money=" + money +
'}';
}
}
群组类继承User类 ,群主发红包
public class Manager extends User{
public Manager() {
}
public Manager(String name, int money) {
super(name, money);
}
//创建一个集合存储红包金额,红包数量
public ArrayList<Integer> send(int totalMoney,int count){
ArrayList<Integer> list=new ArrayList<>();
int leftMoney=super.getMoney();//获取群组当前金额
if (totalMoney>leftMoney){
System.out.println("余额不足,发不了红包");
return list;
}
super.setMoney(leftMoney-totalMoney);//群组发红包后剩余金额
int avg=totalMoney/count;//每份金额钱数
int mod=totalMoney%count;//均分后余额
for (int i = 0; i < count-1; i++) {
list.add(avg);
}
list.add(avg+mod);//最后一份红包金额
return list;
}
}
群成员类继承User类,成员类接受红包
public class Member extends User {
public Member() {
}
public Member(String name, int money) {
super(name, money);
}
public void receive(ArrayList<Integer> list){
//随机获取红包
int index = new Random().nextInt(list.size());//随机生成红包的编号
int delta=list.remove(index);//收到的红包金额
int money=super.getMoney();//用户原有金额
super.setMoney(money+delta);//用户新金额
}
}
测试
public static void main(String[] args) {
Manager manager=new Manager("群主",100);//创建群主
Member a=new Member("用户a",20);//创建用户a
Member b=new Member("用户b",20);//创建用户b
Member c=new Member("用户c",20);//创建用户c
//群主发20元钱红包,分成3个
ArrayList<Integer> list=manager.send(20,3);
a.receive(list);
b.receive(list);
c.receive(list);
System.out.println(manager.toString());
System.out.println(a.toString());
System.out.println(b.toString());
System.out.println(c.toString());
}
结果