Java:接口interface

news2024/11/28 18:53:29

文章目录

  • 接口interface
    • 好处
    • 为什么要用接口
  • 接口案例
    • 需求
    • 思路
    • 代码
      • Student.java
      • ClassManage.java
      • StudentOperator 接口
      • StudentOperatorImpl1.java
      • StudentOperatorImpl2.java
      • Test.java

黑马程序员学习笔记

接口interface

接口中:变量默认为常量,方法默认为抽象方法

  • 接口不能创建对象;
  • 一个累可以实现多个接口,但是只能继承(extends)一个父类
  • 实现多个接口要重写全部接口的全部抽象方法,否则定义该实现类为抽象类
  • 实现接口用关键字implements。alt+回车重写接口所有方法

好处

  • 弥补了单类继承的不足,一个类可以同时实现多个接口
    在这里插入图片描述 - 让程序可以面向接口编程,这样就可以灵活的切换各种业务的实现
    在这里插入图片描述

为什么要用接口

看到接口,别人显性地知道你是谁,有什么功能,从而放心地使用

接口案例

需求

在这里插入图片描述

思路

在这里插入图片描述

代码

在这里插入图片描述

Student.java

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-08-13
 */
public class Student {
    private String name;
    private String sex;
    private double grade;


    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public Student(String name, String sex, double grade) {
        this.name = name;
        this.sex = sex;
        this.grade = grade;
    }
    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", grade=" + grade +
                '}';
    }
}

ClassManage.java

import java.util.ArrayList;

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-08-13
 */
public  class ClassManage{
    private ArrayList<Student> students = new ArrayList<>();
    private StudentOperator studentOperator = new StudentOperatorImpl1();
    //private StudentOperator studentOperator = new StudentOperatorImpl2();

    public ClassManage() {
        students.add(new Student("张三", "男", 90));
        students.add(new Student("李四", "女", 80));
        students.add(new Student("王五", "男", 70));
        students.add(new Student("赵六", "女", 60));
    }

    public void printStudent() {
        studentOperator.printAllStudent(students);
    }
    public void printGrade() {
        studentOperator.printAverageGrade(students);
    }
}

  • 切换方案只需要修改
    在这里插入图片描述

StudentOperator 接口

import java.util.ArrayList;

public interface StudentOperator {
    void printAllStudent(ArrayList<Student> students);
    void printAverageGrade(ArrayList<Student> students);
}

StudentOperatorImpl1.java

import java.util.ArrayList;

public class StudentOperatorImpl1 implements StudentOperator {


    @Override
    public void printAllStudent(ArrayList<Student> students) {
        for (Student i : students){
            System.out.println(i.toString());
        }
    }

    @Override
    public void printAverageGrade(ArrayList<Student> students) {
        double sum = 0;
        for (Student i : students){
            sum += i.getGrade();
        }
        System.out.println("平均成绩为:" + sum / students.size());
    }
}

StudentOperatorImpl2.java

import java.util.ArrayList;

public class StudentOperatorImpl2 implements StudentOperator {


    @Override
    public void printAllStudent(ArrayList<Student> students) {
        int girl = 0;
        for (Student i : students) {
            if (i.getSex().equals("女")) {
                girl++;
                System.out.println(i.toString());
            }
        }
        System.out.println("女生数量:" + girl);
        System.out.println("男生数量:" + (students.size() - girl));
    }

    @Override
    public void printAverageGrade(ArrayList<Student> students) {
        int sum = 0;
        double grades = 0;
        double max = students.get(0).getGrade();
        double min = students.get(0).getGrade();
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getGrade() <= max) {
                sum++;
                grades += students.get(i).getGrade();
                min = students.get(i).getGrade();
            }
            if (students.get(i).getGrade() > min) {
                sum++;
                grades += students.get(i).getGrade();
                max = students.get(i).getGrade();
            }
        }
        System.out.println("平均分:" + (grades - max - min) / (sum - 2));
    }
}

Test.java

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-08-13
 */
public class Test {
    public static void main(String[] args) {
        ClassManage classManage = new ClassManage();
        classManage.printGrade();
        classManage.printStudent();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上门预约o2o系统源码开发及商业模式探索

随着互联网的飞速发展&#xff0c;O2O&#xff08;Online to Offline&#xff09;模式已成为连接线上与线下服务的重要桥梁。上门预约O2O系统作为这一模式下的典型应用&#xff0c;通过整合线上线下资源&#xff0c;为用户提供便捷、高效、个性化的上门服务体验。本文将从商业模…

WebStorm 2024 for Mac/Win:JavaScript开发的高效利器

WebStorm 2024 for Mac/Win是一款专为前端开发者和全栈工程师设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains公司精心打造。这款软件以其强大的功能和卓越的性能&#xff0c;在JavaScript及相关技术的开发领域中脱颖而出&#xff0c;成为众多开发者的首…

无人机电池的使用寿命!

无人机电池的循环寿命一般在100次到500次之间&#xff0c;具体取决于电池类型、质量和使用条件。高品质电池和正确的使用方式可以延长电池的循环寿命。 避免极端温度 避免在过高或过低的温度下使用无人机电池&#xff0c;以免影响电池性能和寿命。 正确存储 将电池存放在干燥…

C语言——预处理详解(下)

目录 前言 #和## 1.#运算符 2.##运算符 命名约定 #undef 命令行定义 条件编译 1.单分支条件编译 2.多分支条件编译 3.判断是否被定义 4.嵌套指令 头文件的包含 1.头文件被包含的方式 (1)本地文件包含 (2)库文件包含 2.嵌套文件包含 其他预处理指令 1.#error…

如何用Python进行数据可视化、科技图表绘制?

目录 写在前面 推荐图书 推荐理由 写在最后 写在前面 有了它&#xff0c;科技图表绘制、数据可视化真的毫无难度&#xff01; 推荐图书 《Python数据可视化&#xff1a;科技图表绘制》(芯智)【摘要 书评 试读】- 京东图书 图书简介 《Python数据可视化:科技图表绘制》结…

mfc140.dll丢失如何修复,一步步教你如何解决mfc140.dll丢失,让电脑快速恢复正常状态!

mfc140.dll是 Microsoft Foundation Class (MFC) Library 的一部分&#xff0c;它是一个用于开发 Windows 应用程序的 C 库。当系统报告mfc140.dll丢失时&#xff0c;通常意味着某个应用程序需要这个 DLL 文件来运行&#xff0c;但系统中没有找到它。那么mfc140.dll丢失如何修复…

Ubuntu下提升高并发socket最大连接数限制

文章目录 前言1. limits.conf修改2. /etc/pam.d修改3. /etc/sysctl.conf修改4. ulimit设置5.重启系统即可生效参考文档 前言 linux系统默认ulimit为1024个访问 用户最多可开启的程序数目。一般一个端口&#xff08;即一个进程&#xff09;的最高连接为2的16次方65536。 查看全…

TPshop商城的保姆教程(Ubuntu)

1.上传TPSHOP源码 选择适合自己的版本下载 TPshop商城源文件下载链接&#xff1a; 百度网盘 请输入提取码 上传tpshop的源码包到特定目录/var/www/html 切换到/var/www/html 目录下 cd /var/www/html修改HTML目录下所有文件权限 chmod -R 777 * 2.打开网址配置 TPshop安…

如何以编程方式解析 XCResult 包的内容

文章目录 介绍查找 XCResult 包分享 XCResult 包 解析 XCResult 包自动解析 XCResult 包的内容 使用 XCResultKit 解析包的内容初始化库获取调用记录 获取测试信息导出屏幕录制 可运行 Demo初始化 Swift Package编写主文件代码解释运行 Demo 结论 介绍 XCResult 包是一个包含运…

Apache SeaTunnel 2.3.5 Zeta-Server集群环境搭建与使用

作者 | 月影幽篁 在当前数据驱动的业务环境中&#xff0c;快速且高效的数据处理能力至关重要。Apache SeaTunnel以其卓越的性能和灵活性&#xff0c;成为数据工程师和开发者的首选工具之一。本文将介绍如何在集群环境中搭建Apache SeaTunnel 2.3.5版本的 Zeta-Server&#xff…

期权强大优势之一的杠杆是什么?!

今天带你了解期权强大优势之一的杠杆是什么&#xff1f;&#xff01;期权是一种合约&#xff0c;该合约赋予持有人在某一特定日期以固定价格买入或卖出一种资产的权利。 期权杠杆是指使用较少的资金控制相对较大金额的股票或其他资产的能力。 期权提供了买入或卖出标的资产的…

U盘救星在此!年度免费数据恢复软件TOP榜

现在这社会&#xff0c;数字信息太重要了&#xff0c;工作文件、学习笔记&#xff0c;还有那些记录美好时光的照片和视频&#xff0c;要是一不小心丢了&#xff0c;那可真是急死人。不过&#xff0c;幸运的是&#xff0c;现在有数据恢复软件&#xff0c;它们就像是数据的救星&a…

Qt多线程编程-run()方法

本文介绍Qt多线程编程-run()方法。 Qt多线程编程主要有2种方法&#xff0c;前面已经介绍了moveToThread()方法&#xff0c;本文介绍另外一种方法run()方法&#xff0c;并给出一个实例参考。 1.基本原理 run()方法首先需要定义一个基于QThread的派生类&#xff0c;QThread类是…

cAdvisor+prometheus+grafana搭建监控页面并嵌入自定义页面中

三者关系 一般公司会有很多docker主机&#xff0c;那么就需要对docker进行监控了&#xff0c;docker监控可以采用docker stats配合shell命令来取值做监控&#xff0c;但是无法传递给prometheus进行采集&#xff0c;zabbix监控docker又比较麻烦&#xff0c;因此就有了谷歌的cad…

Python开源项目周排行 2024年第13周

#2024年第13周2024年8月5日1roop一款基于深度学习框架TensorFlow和Keras开发的单图换脸工具包&#xff0c;提供了丰富的功能和简洁易用的界面&#xff0c;使得用户可以轻松实现单图换脸操作。支持多张人脸替换成同一个人脸&#xff0c;勾选多人脸模式即可 人脸替换 高清修复自…

RCE绕过方式

目录 小于8个字符突破限制 无字母数字执行 php7的做法 php5的思考 PHP5shell 深入理解glob通配符 构造POC&#xff0c;执行任意命令 无参数读文件和RCE总结 代码解读 构造. 另一种构造方法 小于8个字符突破限制 但也只能执行一些非常短的命令&#xff0c;没有什么意义…

【JavaSec】 代码审计01-SpringMVC图书购物系统

【JavaSec】 代码审计01-SpringMVC图书购物系统 文章目录 【JavaSec】 代码审计01-SpringMVC图书购物系统前期部署用户管理修改删除 商品管理修改 普通用户注册 源码地址&#xff1a;https://github.com/Laverrr/bookstore 前期部署 问题一&#xff1a; 启动后报错 Cookie值…

RabbitMQ应用问题 - 消息顺序性保证、消息积压问题

文章目录 MQ 消息顺序性保证概述原因分析解决方案基于 spring-cloud-stream 实现分区消费 消息挤压问题概述原因分析解决方案 MQ 消息顺序性保证 概述 a&#xff09;消息顺序性&#xff1a;消费者消费的消息的顺序 和 生产者发送消息的顺序是一致的. 例如 生产者 发送消息顺序…

centos7 xtrabackup mysql(8)压缩 增量备份(3)

centos7 xtrabackup mysql&#xff08;8&#xff09;压缩 增量备份&#xff08;3&#xff09; 添加数据1 添加数据测试一下 测试主从是否可以 主机端 mysql -u root -p 1234aA~1 show databases ; use company_pro; show tables ; insert into employee(name) value (‘2024…

C++实现单例模式/工厂模式

单例模式 单例模式即一个类只创建一个实例&#xff0c;提供一个全局访问点。单例模式主要是为了控制资源访问&#xff0c;在一些功能如&#xff1a;数据库连接池&#xff0c;日志类实例&#xff0c;线程池等都可以采用单例模式。 // 实现一个单例 #include<iostream> #…