【Java学习笔记】接口

article/2025/7/22 7:07:55

接口

应用场景引出

请添加图片描述


一、接口的介绍

1. 接口的基本结构

interface 接口名{属性抽象方法
}

引出关键字:implements

2. 子类实现接口

class a implements 接口名{}

3. 接口中的属性说明:属性默认是public static final修饰的

4. 接口中的方法说明

5. 代码示例:场景引入的实现

package interface_;public class main {public static void main(String[] args) {person_a person_a = new person_a();person_b person_b = new person_b();interface_implement.t(person_a);System.out.println("============================");interface_implement.t(person_b);}
}interface database_tool{public void connect();public void close();}class interface_implement{public static void t(database_tool n){n.connect();n.close();}
}class person_a implements database_tool{@Overridepublic void connect() {System.out.println("程序员a  连接  了mysql数据库");}@Overridepublic void close() {System.out.println("程序员a  关闭  了mysql数据库");}
}class person_b implements database_tool{@Overridepublic void connect() {System.out.println("程序员b  连接  了oracle数据库");}@Overridepublic void close() {System.out.println("程序员b  连接  了oracle数据库");}
}// 输出结果
程序员a  连接  了mysql数据库
程序员a  关闭  了mysql数据库
============================
程序员b  连接  了oracle数据库
程序员b  连接  了oracle数据库

代码解释


二、接口的使用细节


三、访问接口中属性的三种方式

package c;public class main {public static void main(String[] args) {B b = new B();System.out.println(b.a);System.out.println(A.a);System.out.println(B.a);}
}interface A{int a = 10; // 等价于 public static final a = 10;
}class B implements A{}// 输出结果
10
10
10

说明


四、接口 VS 继承

核心理解:接口是对 Java 中单继承机制的补充说明

(1)继承的价值主要在于:解决代码的复用性和可维护性

(2)接口的价值主要在于:设计好各种规范(方法),让其它类去实现这些方法,更加的灵活

案例说明:通过接口让猴子实现鱼类的游泳方法鸟类的飞行功能

package a;public class main {public static void main(String[] args) {monkey monkey = new monkey("monkey");monkey.climb_tree();monkey.swim();monkey.fly();}
}interface fish{void swim();  // 默认是 public
}interface bird{void fly();  // 默认是 public
}// 类可以继承多个接口
class monkey implements fish,bird{String name;// 构造器public monkey(String name){this.name = name;}public String getName() {return name;}@Overridepublic void swim() {System.out.println(getName() + "通过学习,获得——>鱼类的swim()方法");}@Overridepublic void fly() {System.out.println(getName() + "通过学习,获得——>鸟类的fly()方法");}public void climb_tree(){System.out.println(getName() + "本身拥有——>climb_tree()方法");}
}// 输出结果
monkey本身拥有——>climb_tree()方法
monkey通过学习,获得——>鱼类的swim()方法
monkey通过学习,获得——>鸟类的fly()方法

代码解释


五、接口 VS 多态

多态的体现

  • (1)多态参数(只要是实现了接口的类,都可以把类作为参数传入接口调用的方法,实现调用接口的功能)

  • (2)多态数组

    • 说明:可以定义一个接口类型的数组,数组元素可以是实现了接口的类,之后完成一些具体要求

  • (3)多态传递

(1)代码示例:多态数组

要求:编写 a 类,b 类实现接口,遍历数组,调用共有的方法,如果遍历的是 b 类,即调用独有的方法

package a;public class main {public static void main(String[] args) {arr[] interface_arr = new arr[2];interface_arr[0] = new a();interface_arr[1] = new b();for (int i = 0; i < interface_arr.length; i++) {interface_arr[i].shared_method();// 如果是b对象就调用其独有的方法if(interface_arr[i] instanceof b){((b) interface_arr[i]).unique_method();}}}
}interface arr{void shared_method();
}class a implements arr{public void shared_method(){System.out.println("a类中调用了共有的方法");}
}class b implements arr{public void shared_method(){System.out.println("b类中调用了共有的方法");}public void unique_method(){System.out.println("调用了b类独有的方法");}
}// 输出结果
a类中调用了共有的方法
b类中调用了共有的方法
调用了b类独有的方法

(2)代码示例:多态传递

package d;public class main {public static void main(String[] args) {B b = new test_class();A a = new test_class();}
}interface A{void a();
}interface B extends A{void b();
}class test_class implements B{@Overridepublic void a() {}@Overridepublic void b() {}
}

代码解释


http://www.hkcw.cn/article/YVXOwNjAnU.shtml

相关文章

02 APP 自动化-Appium 运行原理详解

环境搭建见 01 APP 自动化-环境搭建 文章目录 一、Appium及Appium自动化测试原理二、Appium 自动化配置项三、常见 ADB 命令四、第一个 app 自动化脚本 一、Appium及Appium自动化测试原理 Appium 跨平台、开源的 app 自动化测试框架&#xff0c;用来测试 app 应用程序&#x…

(1)pytest简介和环境准备

1. pytest简介 pytest是python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效率更高。根据pytest的官方网站介绍&#xff0c;它具有如下特点&#xff1a; 非常容易上手&#xff0c;入门简单&a…

同元软控、核动力研究院与华北电力大学产学研联合实训室正式揭牌

2025年5月27日&#xff0c;华北电力大学、苏州同元软控信息技术有限公司&#xff08;以下简称“同元软控”&#xff09;、中国核动力研究设计院&#xff08;以下简称“核动力研究院”&#xff09;联合实训室揭牌授权仪式暨座谈交流会在华北电力大学召开。华北电力大学教务处处长…

PyTorch中nn.Module详解

直接print(dir(nn.Module))&#xff0c;得到如下内容&#xff1a; 一、模型结构与参数 parameters() 用途&#xff1a;返回模块的所有可训练参数&#xff08;如权重、偏置&#xff09;。示例&#xff1a;for param in model.parameters():print(param.shape)named_parameters…

若依项目天气模块

在若依项目里添加了一个天气模块&#xff0c;记录一下过程。 一、功能结构与组件布局 天气模块以卡片形式&#xff08;el-card&#xff09;展示&#xff0c;包含以下核心功能&#xff1a; 实时天气&#xff1a;显示当前城市、温度、天气状况&#xff08;如晴、多云&#xff…

APM32芯得 EP.06 | APM32F407移植uC/OS-III实时操作系统经验分享

《APM32芯得》系列内容为用户使用APM32系列产品的经验总结&#xff0c;均转载自21ic论坛极海半导体专区&#xff0c;全文未作任何修改&#xff0c;未经原文作者授权禁止转载。 最近我开始学习 uC/OS-III 实时操作系统&#xff0c;并着手将其移植到APM32F407 开发板上。在这个过…

图解gpt之注意力机制原理与应用

大家有没有注意到&#xff0c;当序列变长时&#xff0c;比如翻译一篇长文章&#xff0c;或者处理一个长句子&#xff0c;RNN这种编码器就有点力不从心了。它把整个序列信息压缩到一个固定大小的向量里&#xff0c;信息丢失严重&#xff0c;而且很难记住前面的细节&#xff0c;特…

更新密码--二阶注入攻击的原理

1.原理知识&#xff1a; 二阶SQL注入攻击&#xff08;Second-Order SQL Injection&#xff09;原理详解 一、基本概念 二阶注入是一种"存储型"SQL注入&#xff0c;攻击流程分为两个阶段&#xff1a; ​​首次输入​​&#xff1a;攻击者将恶意SQL片段存入数据库​…

RFID技术助力托盘运输线革新

RFID技术助力托盘运输线革新 湖北某工厂托盘运输线使用上存在的问题&#xff1a; 1、托盘在运输线上受信息录入时间等问题影响&#xff0c;导致效率低下&#xff1b; 2、原先托盘上粘贴的条码容易污损&#xff0c;并且时常需要更新更换&#xff0c;导致信息录入、出入库等步…

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天&#xff0c;EasyRTC作为一款全平台互通的实时视频通话方案&#xff0c;实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同&#xff0c;开发者通过该方案可快速搭建1v1实时音视频通信系统&#xff0c;适…

java.io.IOException: ZIP entry size is too large or invalid

java.io.IOException: ZIP entry size is too large or invalid 解决方案&#xff1a;pom.xml添加<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>

vue3 项目配置多语言支持,如何从服务端拿多语言配置

在 Vue3 项目中实现多语言支持并从服务端获取配置&#xff0c;可以使用 Vue I18n 库。在初始化阶段可以发送请求获取多语言配置或者通过本地文件加载json文件的方式&#xff0c;都可以实现。我这里是tauri项目&#xff0c;所以使用的是invoke从tauri端拿到配置文件&#xff0c;…

龙舟竞渡与芯片制造的共通逻辑:华芯邦的文化破局之道

端午节承载着中华民族数千年的精神密码&#xff0c;龙舟最初是古人沟通天地、祈求风调雨顺的仪式载体。战国时期&#xff0c;屈原投江的悲壮故事为端午注入了家国情怀&#xff0c;龙舟竞渡从此兼具纪念英雄与祈福避疫的双重意义。这种文化内核&#xff0c;与深圳市华芯邦“以科…

OS9.【Linux】基本权限(下)

目录 1.默认权限 掩码 修改权限掩码 目录的权限说明 r权限 w权限 x权限 结论 家目录权限 2.共享目录 粘滞位t 承接OS8.【Linux】基本权限(上)文章 1.默认权限 创建用户时拥有者所属组都是该用户,而且对其他人没有任何权限 掩码 新建文件new.txt1和目录folder后…

【容器docker】启动容器kibana报错:“message“:“Error: Cannot find module ‘./logs‘

说明&#xff1a; 1、服务器数据盘挂了&#xff0c;然后将以前的数据用rsync拷贝过去&#xff0c;启动容器kibana服务&#xff0c;报错信息如下图所示&#xff1a; 2、可能是拷贝docker文件夹&#xff0c;有些文件没有拷贝过去&#xff0c;导致无论是给文件夹授权用户kibana或者…

【25-cv-05917】HSP律所代理Le Petit Prince 小王子商标维权案

Le Petit Prince 小王子 案件号&#xff1a;25-cv-05917 立案时间&#xff1a;2025年5月28日 原告&#xff1a;SOCIETE POUR LOEUVRE ET LA MEMOIRE DANTOINE DE SAINT EXUPERY - SUCCESSION DE SAINT EXUPERY-DAGAY 代理律所&#xff1a;HSP 原告介绍 《小王子》&#x…

信创国产化

一、硬件国产化 1. 飞腾E2000Q 二、操作系统国产化 1. 麒麟系统 1.1 麒麟嵌入式支持飞腾E2000Q 1.1.1 启动安装盘制作 1. 下载rufus工具,安装,下载麒麟系统ISO镜像文件。 2. 使用rufus制作启动盘,U盘插入(注先备份数据,会格式化盘符),配置参数如图。 3. 点击…

一、Sqoop历史发展及原理

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月30日 专栏&#xff1a;Sqoop教程 在大数据时代&#xff0c;数据往往分散存储在各种不同类型的系统中。其中&#xff0c;传统的关系型数据库 (RDBMS) 如 MySQL, Oracle, PostgreSQL 等&#xff0c;仍然承载着大量的关键业务…

2.从0开始搭建vue项目(node.js,vue3,Ts,ES6)

从“0到跑起来一个 Vue 项目”&#xff0c;重点是各个工具之间的关联关系、职责边界和技术演化脉络。 从你写代码 → 到代码能跑起来 → 再到代码可以部署上线&#xff0c;每一步都有不同的工具参与。 &#x1f63a;&#x1f63a;1. 安装 Node.js —— 万事的根基 Node.js 是…

包管理工具

npx工具 npx是什么捏&#xff1f; npx是npm5.2之后自带的一个命令 npx的作用非常之多&#xff0c;但是比较常见的是它用来调用项目中的某个模块的指令 现在假设一个场景&#xff1a; 你在项目里安装了webpack&#xff0c;也在全局中安装了webpack&#xff0c;但是这俩版本…