学习java中的interface接口

1.了解接口

java提供了一个关键字interface,用这个关键字我们可以定义出一个特殊的结构:接口

格式:

public interface 接口名{
//成员变量(常量)
//成员方法(抽象方法)
}

注意:接口不能创建对象,接口 是用来被类实现(implements)的 ,实现接口的类被称为实现类。

书写格式:

public class 实现类 implements 接口1,接口2.....{}

一个类中可以实现多个接口,实现类实现多个接口,必须重写完全部接口的抽象方法,否则实现类需要定义成抽象类。

2.接口的好处

弥补了单继承的不足,一个类可以同时实现多个接口。

让程序可以面向接口编程,让程序员可以灵活方便的切换各种业务实现。

3.接口案例-学生管理

package com.web807.interface_study;import java.util.ArrayList;public class ClassManager {private ArrayList<Student> students = new ArrayList<Student>();private StudentOperator studentOperator = new StudentOperatorImpl();public ClassManager() {Student student1 = new Student("Tom", '男', 98);Student student2 = new Student("jerry", '男', 99);Student student3 = new Student("merry", '女', 100);Student student4 = new Student("lily", '女', 97);students.add(student1);students.add(student2);students.add(student3);students.add(student4);}//打印全班全部学生的信息public void printInfo() {studentOperator.printAll(students);}//打印全班全部学生的平均分public void score() {studentOperator.printScore(students);}
}
package com.web807.interface_study;public class Student {private String name;private char sex;private double score;public Student() {}public Student(String name, char sex, double score) {this.name = name;this.sex = sex;this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}
}
package com.web807.interface_study;import java.util.ArrayList;public interface StudentOperator {void printAll(ArrayList<Student> students);void printScore(ArrayList<Student> students);}
package com.web807.interface_study;import java.util.ArrayList;public class StudentOperatorImpl implements StudentOperator {@Overridepublic void printAll(ArrayList<Student> students) {System.out.println("--------打印全部学生信息----------");int count1 = 0;int count2 = 0;for (int i = 0; i < students.size(); i++) {Student student = students.get(i);System.out.println("学生姓名:" + student.getName());System.out.println("学生性别:" + student.getSex());System.out.println("学生成绩:" + student.getScore());if (student.getSex() == '男') {count1++;} else {count2++;}System.out.println("-*-----------*-");}System.out.println("男生人数:" + count1);System.out.println("女生人数:" + count2);System.out.println("---------------------------");}@Overridepublic void printScore(ArrayList<Student> students) {System.out.println("--------打印全部学生的平均成绩----------");double MaxScore = students.get(0).getScore();double MinScore = students.get(0).getScore();double sum = 0;for (int i = 0; i < students.size(); i++) {Student student = students.get(i);if (student.getScore() > MaxScore) {MaxScore = student.getScore();}if (student.getScore() > MinScore) {MinScore = student.getScore();}sum += student.getScore();}double average = (sum - MaxScore - MinScore) / students.size();System.out.println("平均成绩:" + average);System.out.println("-------------------------------");}
}
package com.web807.interface_study;public class Main {public static void main(String[] args) {// 创建实现了接口的对象ClassManager classManager = new ClassManager();classManager.printInfo();classManager.score();}
}

 

4.JDK8新增的三种接口格式

为什么要新增这些方法呢?

可以增强接口的能力,更加便于项目的扩展和维护。

1.默认方法:必须使用default修饰,默认会被public修饰

实例方法:对象的方法,必须使用类的对象来进行访问。

default void test1(){----
}

2.私有方法:必须使用private修饰(JDK9开始支持的)

实例方法:对象的方法

private void test(){
------
}

3.静态方法:必须使用static修饰,默认会被public修饰。

static void test(){
------
}

我们会发现,接口默认是使用public修饰的,那为什么会使用public修饰呢?

因为接口都是供别人使用的,所以在一般情况下,会被public修饰。

5.接口的多继承

一个接口可以同时继承多个接口。

注意:

1.一个接口继承多个接口,如果多个接口存在方法签名冲突,则此时不支持多继承。

2.一个类实现多个接口,如果多个接口存在方法签名冲突,则此时不支持多实现。

3.一个类继承了父类,又同时实现了接口,父类中和接口中又同名的默认方法,实现类会优先用父类的。

4.一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python——Fastapi管理平台(打包+优化)

目录 一、配置多个表 1、后端项目改造 2、导包报错——需要修改&#xff08;2个地方&#xff09; 3、启动后端&#xff08;查看是否有问题&#xff09; 4、配置前端 二、打包——成exe文件&#xff08;不包含static文件&#xff09;简单 1、后端修改 2、前端修改 3、运行打包命…

[论文笔记]Longformer: The Long-Document Transformer

引言 今天带来论文Longformer: The Long-Document Transformer的笔记。 基于Transformer的模型由于其自注意力操作而无法处理长序列&#xff0c;该操作随着序列长度呈二次扩展。为了解决这一限制&#xff0c;本篇工作提出了Longformer&#xff0c;其注意力机制随着序列长度呈…

批量邮箱API发送邮件的方法?如何使用API?

批量邮箱API发送邮件效率怎么样&#xff1f;API接口发信的优势&#xff1f; 批量发送邮件已经成为许多企业、机构或个人进行营销推广、信息传递的重要手段。然而&#xff0c;如何高效、准确地实现批量邮箱发送&#xff0c;却是许多人面临的难题。AokSend就来探讨一下利用API进…

Python基础学习之logging模块

在Python编程中&#xff0c;日志记录&#xff08;Logging&#xff09;是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误&#xff0c;还可以记录程序运行时的关键信息&#xff0c;以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功…

C++从入门到精通——模板

模板 前言一、泛型编程二、函数模板函数模板的概念函数模板格式示例 函数模板的原理函数模板的实例化隐式实例化显式实例化示例 auto做模板函数的返回值模板参数的匹配原则总结 三、类模板类模板的定义格式类模板的实例化 前言 C模板是C语言中的一种泛型编程技术&#xff0c;可…

IDEA--debug

1. 单点调试的三个级别 Step into&#xff1a;在单步执行时&#xff0c;遇到子函数就进入并且继续单步执行。Step over&#xff1a;在单步执行时&#xff0c;在函数内遇到子函数时不会进入子函数内单步执行&#xff0c;而是将子函数整个执行完再停止&#xff0c;也就是把子函数…

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面&#xff1f;新建子模块界面&#xff01; 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务&#xff0c;并且使用的技术栈也相当丰富&#xff0c;但是目前只提…

ThingsBoard通知中心讲解

1、概述 2、案例 2.1、通知发送方式 2.2、发送通知 3、Templates模板 3.1、Add new template添加新模板 1、概述 ThingsBoard 通知中心是一个用于在平台内发送、管理和自动化通知的综合工具。它允许多种通知方法&#xff0c;包括网络、电子邮件、移动应用程序、短信以及与 …

基于SpringBoot+Vue点餐系统设计和实现(源码+LW+部署讲解)

&#x1f339;作者简介&#xff1a;✌全网粉丝10W&#xff0c;前大厂员工&#xff0c;多篇互联网电商推荐系统专利&#xff0c;现有多家创业公司&#xff0c;致力于建站、运营、SEO、网赚等赛道。也是csdn特邀作者、博客专家、Java领域优质创作者&#xff0c;博客之星、掘金/华…

go mod

常用命令 初始化模块 go mod init 模块名下载 go.mod 文件中指明的所有依赖 go mod download github.com/gin-gonic/ginv1.9.(依赖路径)依赖对其&#xff08;使引用的都是所依赖的&#xff09; go mod tidy编辑go.mod go mod edit go mod edit -require"github.com/g…

哪个品牌的骨传导耳机好用?精选五大高性能热门骨传导耳机款式推荐!

我作为一名热衷于音乐的数码博主&#xff0c;在选购产品前也习惯于先浏览各种榜单。最近&#xff0c;我发现关于骨传导耳机的讨论热度极高&#xff0c;有人认为骨传导耳机是非常值得入手的新型蓝牙耳机&#xff0c;也有人认为骨传导耳机只是智商税的产品。经过深入调查后&#…

【计算机网络】FTP站点配置搭建教程以及相关问题解决方案(超详细)

文章目录 1、安装Window Server 20082、搭建FTP环境&#xff08;1&#xff09;安装FTP服务器&#xff08;2&#xff09;配置FTP服务器&#xff08;3&#xff09;测试FTP连接 3、遇到的问题以及解决方案&#xff08;1&#xff09;Windows无法访问此文件夹&#xff08;2&#xff…

Android Ant编译环境配置(Win)

1、 载ant包: 2、设置环境变量&#xff1a; 3、检查是否设置成功及版本 4、执行命令&#xff1a; android update project -p . -n “projectname”&#xff08;例如&#xff1a;android update project --target 1 -p . -n “Couplet”&#xff09;(只输入红色部分也是可以的…

AC/DC电源模块的高效能源管理与效率优化

BOSHIDA AC/DC电源模块的高效能源管理与效率优化 AC/DC电源模块是一种常见的电源转换装置&#xff0c;用于将交流电转换为直流电。它被广泛应用于各种电子设备中&#xff0c;如计算机、通信设备、工业自动化设备等。在现代化的科技社会中&#xff0c;高效能源管理和效率优化变…

swift微调多模态大语言模型

微调训练数据集指定方式的问题请教 Issue #813 modelscope/swift GitHubQwen1.5微调训练脚本中&#xff0c;我用到了--dataset new_data.jsonl 这个选项&#xff0c; 可以训练成功&#xff0c;但我看文档有提到--custom_train_dataset_path这个选项&#xff0c;这两个有什么…

​可视化大屏C位图:3D模型,可视化大屏的画龙点睛之处

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将图表作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 3D模型在可视化大屏中有很大的价值&#xff0c;以下是一些相关的优点&#xff1a…

基于springboot实现在线考试系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线考试系统演示 摘要 使用旧方法对在线考试系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在在线考试系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及…

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …

JuiceFS v1.2-beta1,Gateway 升级,多用户场景权限管理更灵活

JuiceFS v1.2-beta1 今天正式发布。在这个版本中&#xff0c;除了进行了大量使用体验优化和 bug 修复外&#xff0c;新增三个特性&#xff1a; Gateway 功能扩展&#xff1a;新增了“身份和访问管理&#xff08;Identity and Access Management&#xff0c;IAM&#xff09;” 与…

JAVA面试专题-框架篇(Spring+Mybatis)

Spring Spring框架中的单例bean是线程安全的吗&#xff1f; bean上面可以加入注解Scope&#xff0c;如果是singleton&#xff08;默认&#xff09;&#xff0c;意味着bean在每个spring IOC容器中只有一个实例&#xff1b;如果是prototype&#xff0c;说明一个bean定义可以有多…