9.2 抽象类定义、子类是抽象类

这篇博客探讨了Java中的抽象类定义,强调了含有抽象方法的类必须声明为抽象类。内容包括抽象方法的特点,如无方法主体,并且抽象类不能直接实例化。子类继承抽象类时,必须重写所有抽象方法,除非子类自身也是抽象类。博客还提供了发红包的案例,包括抽象父类User、群组类和群成员类的实现,以及测试结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想了解更多请查看java学习(idea版)

目录

抽象类定义

列:抽象类练习

列:当子类是抽象类时

列:发红包案例


抽象类定义

  1.  没有方法主体的方法称为抽象方法
  2. 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());
    }

结果

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值