抽象类

1.抽象类和抽象方法的介绍以及使用

抽象方法的概念:如果父类当中的方法不确定如何进行方法体{ }的实现,那么这就应该是一个抽象方法

1.1 抽象方法和抽象类的格式

抽象方法:就是在普通成员方法的基础上加上abstract 关键字 然后去掉大括号,直到分号结束
抽象类:抽象方法所在的类,必须是抽象类才行,在class前面加上abstract,抽象类没有方法体 { }

在这里插入图片描述

抽象方法是方法的概括,而一个个具有差异化方法的实现是抽象方法的具体。

1.2抽象类和抽象方法的使用

1.不能直接创建抽象类对象
2.必须用一个子类来继承抽象父类

3.子类必须覆盖重写父类当中所有的抽象方法。
覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体和大括号

4.创建子类对象进行使用

//抽象父类
public abstract class Animal {
    //这是一个抽象方法,代表着吃东西,但是具体吃什么(大括号的内容)不确定。
    public abstract void eat();
    
    //这是普通的成员方法
   public void method()
  {

  }
}

//子类
public class cat extends Animal{
    public  void eat()
    {
        System.out.println("猫吃鱼");
    }

    public static void main(String[] args) {
   //Animal animal =new Animal();  错误写法 不能直接创建抽象类对象!要从它的子类创建对象来调用
        cat cat1=new cat();
        cat1.eat();  //猫吃鱼

    }`
}

1.3抽象类和抽象方法的注意事项

在这里插入图片描述
1.3.1作为子类继承抽象父类出现编译错误的两种情况

  • 1.要么子类写成抽象类,因为子类本身就继承了父类的抽象方法,子类不是抽象类就不能编译成功抽象方法
  • 2.要么子类覆盖重写抽象父类的抽象方法。(这种方式让抽象方法可以使用

1.4抽象类的应用

题目:群主发普通红包,某群有多名成员,群主给成员发普通红包。

规则:群主的一笔金额从群主余额中扣除,平均分成N等份,让成员领取
成员领取红包后,保存到成员余额中。

请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作

//用户类 公共类
ublic class User {
   private String name; //名字
    private int count;  //余额
    private int people; //人数
    public int getPeople() {
        return people;
    }

    public void setPeople(int people) {
        this.people = people;
    }


    public void show()
    {
        System.out.println("名字:"+name+" 余额:"+count);
    }
    public User(String name,int count){
        this.name = name;
        this.count=count;
        this.people=people;
    }
    public User()
    {

    }
    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

//群主类
mport java.util.ArrayList;

public class Groupleader extends User {

    public Groupleader(String name, int count)
    {
        super(name, count);
    }

    public Groupleader()
    {

    }

    //发红包
    public ArrayList<Integer> send(int totalMoney,int people) {
        //需要一个以及集合,用来存储若干红包的金额
        ArrayList<Integer> num = new ArrayList<>();
        //首先设置一下群主有多少钱
        super.setCount(100);
        int wallet = super.getCount();
        //扣钱,重新设置余额
        if (wallet >= totalMoney) {
            wallet -= totalMoney;
            super.setCount(wallet);
        } else {
            System.out.println("余额不足");
            return num;     //钱不够就返回空集合
            }
        //发红包平均拆分为people份
        int average = totalMoney / people;//均分
        int average1=totalMoney % people;

        ;
        // 把红包一个个放入集合当中,零头放在最后一个红包里
        for (int i = 0; i < people; i++) {

            if (i == people - 1) {
                num.add(average1 + average);
            }
            else
              {
                num.add(average);
              }

        }
        return num;
    }
}

//成员类
import java.util.ArrayList;
import java.util.Random;

public class Members extends User{

    public Members(String name, int count) {
        super(name, count);
    }

    public Members() {
    }

    public void receive(ArrayList<Integer> num)
    {
   //从多个红包当中随便抽取一个,给我自己,删除对应的编号
        int index=new Random().nextInt(num.size());//获取一个随机的索引值

        //查看自己有多少钱,加钱进去
        super.getCount();
        super.setCount(num.get(index));

        num.remove(index);
    }

}

//测试类
import java.util.ArrayList;
import java.util.Random;

public class Members extends User{

    public Members(String name, int count) {
        super(name, count);
    }

    public Members() {
    }

    public void receive(ArrayList<Integer> num)
    {
   //从多个红包当中随便抽取一个,给我自己,删除对应的编号
        int index=new Random().nextInt(num.size());//获取一个随机的索引值

        //查看自己有多少钱,加钱进去
        super.getCount();
        super.setCount(num.get(index));

        num.remove(index);
    }

}

/*结果
名字:群主 余额:100
名字:A 余额:0
名字:B 余额:0
名字:C 余额:0
======================
名字:群主 余额:80
名字:A 余额:6
名字:B 余额:6
名字:C 余额:8*/

总结:
定义一个标准的类,全参数的构造方法,无参数的构造方法,每一个成员变量前面都加private,并且每一个变量都要定义一个getter和setter方法。
每一个方法的作用:从方法名 返回值 参数 开始拟草稿
父类的编写;从题目中找出一些公共的特点作为父类的成员变量

【基于Python的大麦网自动抢票工具的设计与实现】 随着互联网技术的发展,网络购票已经成为人们生活中不可或缺的一部分。尤其是在文化娱乐领域,如音乐会、演唱会、戏剧等活动中,热门演出的门票往往在开售后瞬间就被抢购一空。为了解决这个问题,本论文探讨了一种基于Python的自动抢票工具的设计与实现,旨在提高购票的成功率,减轻用户手动抢票的压力。 Python作为一种高级编程语言,因其简洁明了的语法和丰富的第三方库,成为了开发自动化工具的理想选择。Python的特性使得开发过程高效且易于维护。本论文深入介绍了Python语言的基础知识,包括数据类型、控制结构、函数以及模块化编程思想,这些都是构建抢票工具的基础。 自动化工具在现代社会中广泛应用,尤其在网络爬虫、自动化测试等领域。在抢票工具的设计中,主要利用了自动化工具的模拟用户行为、数据解析和定时任务等功能。本论文详细阐述了如何使用Python中的Selenium库来模拟浏览器操作,通过识别网页元素、触发事件,实现对大麦网购票流程的自动化控制。同时,还讨论了BeautifulSoup和requests库在抓取和解析网页数据中的应用。 大麦网作为国内知名的票务平台,其网站结构和购票流程对于抢票工具的实现至关重要。论文中介绍了大麦网的基本情况,包括其业务模式、用户界面特点以及购票流程,为工具的设计提供了实际背景。 在系统需求分析部分,功能需求主要集中在自动登录、监控余票、自动下单和异常处理等方面。抢票工具需要能够自动填充用户信息,实时监控目标演出的票务状态,并在有票时立即下单。此外,为了应对可能出现的网络延迟或服务器错误,工具还需要具备一定的错误恢复能力。性能需求则关注工具的响应速度和稳定性,要求在大量用户同时使用时仍能保持高效运行。 在系统设计阶段,论文详细描述了整体架构,包括前端用户界面、后端逻辑处理以及与大麦网交互的部分。在实现过程中,采用了多线程技术以提高并发性,确保在抢票关键环节的快速响应。此外,还引入了异常处理机制,以应对网络故障或程序错误。 测试与优化是确保抢票工具质量的关键步骤。论文中提到了不同场景下的测试策略,如压力测试、功能测试和性能测试,以验证工具的有效性和稳定性。同时,通过对抢票算法的不断优化,提高工具的成功率。 论文讨论了该工具可能带来的社会影响,包括对消费者体验的改善、对黄牛现象的抑制以及可能引发的公平性问题。此外,还提出了未来的研究方向,如增加多平台支持、优化抢票策略以及考虑云服务的集成,以进一步提升抢票工具的实用性。 本论文全面介绍了基于Python的大麦网自动抢票工具的设计与实现,从理论到实践,从需求分析到系统优化,为读者提供了一个完整的开发案例,对于学习Python编程、自动化工具设计以及理解网络购票市场的运作具有重要的参考价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值