当前位置: 首页 > news >正文

JAVA系列 小白入门参考资料 接口

目录

接口

接口的概念

语法 

接口使用 

接口实现用例 

接口特性  

实现多个接口和实现用例

接口间的继承 


接口

接口的概念

在现实生活中,接口的例子比比皆是,比如:笔记本上的 USB 口,电源插座等。
电脑的 USB 口上,可以插: U 盘、鼠标、键盘 ... 所有符合 USB 协议的设备
电源插座插孔上,可以插:电脑、电视机、电饭煲 ... 所有符合规范的设备
通过上述例子可以看出: 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用
Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。 

语法 

接口在语法上和类相似 

public interface 接口名称 {

......

}

提示:   创建接口时, 接口的命名一般以大写字母 I 开头 

接口使用 

接口不能直接使用,必须要有一个"实现类""实现"该接口,并实现接口中的所有抽象方法。

public class 类名称 implements 接口名称 {

...

}

注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。  


接口实现用例 

以笔记本电脑使用 USB 鼠标、 USB 键盘为例

USB接口        笔记本类        鼠标类        键盘类

//USB接口
public interface USB {//方法,打开设备,关闭设备void openEquipment();void stopEquipment();
}//定义鼠标类,使用接口
class Mouse implements USB {//使用接口,就要重写USB接口的抽象方法@Overridepublic void openEquipment() {System.out.println("使用鼠标");}//自定义一个鼠标点击的功能public void click(){System.out.println("鼠标点击");}@Overridepublic void stopEquipment() {System.out.println("关闭鼠标");}
}//定义键盘类,使用接口
class Keyboard implements USB{@Overridepublic void openEquipment() {System.out.println("使用键盘");}//自定义一个键盘输入的方法public void inPut() {System.out.println("键盘输入");}@Overridepublic void stopEquipment() {System.out.println("关闭键盘");}
}
//定义电脑类,使用设备
class Computer{public void powerOn(){System.out.println("打开电源");}public void useEquipment(USB usb){//这里使用USB usb的原因是:为了传参并发生向上转型usb.openEquipment();//这里会发生动态绑定//这里,我们调用了使用设备的方法,但我们有鼠标和键盘,他们都要各自特有的方法click和inPut//但usb是接口类型,直接用usb去调用他们的特有方法,不可行//区分 引用的是谁的对象if(usb instanceof Mouse){Mouse mouse = (Mouse) usb;mouse.click();}else if(usb instanceof Keyboard){Keyboard keyboard = (Keyboard) usb;keyboard.inPut();}usb.stopEquipment();}public void powerOff(){System.out.println("关闭电源");}}
class Test{public static void main(String[] args) {Computer computer = new Computer();computer.powerOn();System.out.println();computer.useEquipment(new Keyboard());System.out.println();computer.useEquipment(new Mouse());System.out.println();computer.powerOff();}
}


接口特性  

  1. 接口类型是一种引用类型,不能直接 new 接口的对象
  2. 接口中的每一个方法都是默认被 public abstract 修饰
  3. 接口中的方法不能在接口中实现(因为抽象方法不能有具体的实现),只能由实现接口的类来实现
  4. 重写接口中的方法时,不能使用默认的访问权限(因为接口的方法默认是public)
  5. 接口中可以拥有变量,但接口中的变量会默认被public static final 修饰
  6. 接口中不能有静态代码块和构造方法
  7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
  8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类

实现多个接口和实现用例

Java 中,类和类之间是单继承的,一个类只能有一个父类,即 Java 中不支持多继承 ,但是 一个类可以实现多个接
下面通过类来表示一组动物
创一个动物类
//动物类
class Animals{private String name;public Animals(String name) {this.name = name;}
}

创几个接口 

//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飞 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}

创几个具体的动物类 

小狗,可以吃和跑 

class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}

小鱼,可以吃和游 

class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}

小鸭子,可以吃,飞,跑和游

class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飞");}@Overridepublic void swim() {}
}

上面的代码展示了 Java 面向对象编程中最常见的用法: 一个类继承一个父类, 同时实现多种接口 

继承表达的含义是 is - a 语义, 而接口表达的含义是 具有 xxx 特性 

以下是完整代码和执行结果 

class Animals{public String name;public Animals(String name) {this.name = name;}
}//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飞 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飞");}@Overridepublic void swim() {}
}public class Blog {public static void main(String[] args) {Dog dog = new Dog("小狗");dog.eat();dog.run();Fish fish = new Fish("小鱼");fish.eat();fish.swim();Duck duck = new Duck("小鸭子");duck.eat();duck.fly();duck.run();duck.swim();}}


接口间的继承 

Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。
接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字
interface RUN{void run();
}//游泳 接口
interface SWIM{void swim();
}interface ICanDo extends RUN, SWIM {
}class Frog implements ICanDo {...
}

 通过接口继承创建一个新的接口 ICanDo 表示 "两栖的". 此时实现接口创建的 Frog , 就继续要实现 run 方法, 也需要实现 swim 方法.

接口间的继承相当于把多个接口合并在一起

相关文章:

JAVA系列 小白入门参考资料 接口

目录 接口 接口的概念 语法 接口使用 接口实现用例 接口特性 实现多个接口和实现用例 接口间的继承 接口 接口的概念 在现实生活中,接口的例子比比皆是,比如:笔记本上的 USB 口,电源插座等。 电脑的 USB 口上&am…...

日报表定时任务优化历程

报表需求背景 报表是一个很常见的需求,在项目中后期往往会需要加多种维度的一些统计信息,今天就来谈谈上线近10个月后的一次报表优化优化之路(从一天报表跑需要五分钟,优化至秒级) 需求:对代理商进行日统计…...

excel表格里,可以把百分号放在数字前面吗?

在有些版本里是可以的,这样做: 选中数据,鼠标右键,点击设置单元格格式,切换到自定义,在右侧栏输入%0,点击确定就可以了。 这样设置的好处是,它仍旧是数值,并且数值大小没…...

应用案例 | 商业电气承包商借助Softing NetXpert XG2节省网络验证时间

一家提供全方位服务的电气承包商通过使用Softing NetXpert XG2顺利完成了此次工作任务——简化了故障排查的同时,还在很大程度上减少了不必要的售后回访。 对已经安装好的光纤或铜缆以太网网络进行认证测试可能会面临不同的挑战,这具体取决于网络的规模、…...

【JAVA语言-第20话】多线程详细解析(二)——线程安全,非线程安全的集合转换成线程安全

目录 线程安全 1.1 概述 1.2 案例分析 1.3 解决线程安全问题 1.3.1 使用synchronized关键字 1.3.1.1 同步代码块 1.3.1.2 同步方法 1.3.2 使用Lock锁 1.3.2.1 概述 代码示例: 1.4 线程安全的类 1.4.1 非线程安全集合转换成线程安全集合 1.5 总结 …...

区块链中的加密算法及其作用

区块链技术以其去中心化、不可篡改、透明公开的特性,在全球范围内引发了广泛的关注和讨论。其中,加密算法作为区块链技术的核心组成部分,对于维护区块链网络的安全、确保数据的完整性和真实性起到了至关重要的作用。本文将详细介绍区块链中常…...

微信小程序跳转微信管理平台配置的客服及意见页面

<button open-type"contact" bindcontact"handleContact" session-from"sessionFrom">帮助与客服</button> 不需要路径 在当前小程序中会自动进入 open-type"contact" 其他参数不用修改 只修改这个参数对应表单组件 /…...

灌溉机器人 状压dp

灌溉机器人 题目描述 农田灌溉是一项十分费体力的农活&#xff0c;特别是大型的农田。小明想为农民伯伯们减轻农作负担&#xff0c;最近在研究一款高科技——灌溉机器人。它可以在远程电脑控制下&#xff0c;给农田里的作物进行灌溉。 现在有一片 N 行 M 列的农田。农田的土…...

用于接收参数的几个注解

了解四种主要请求方法的传参格式 GET方法&#xff1a; 参数通常通过URL的查询字符串&#xff08;query string&#xff09;传递&#xff0c;形式为key1value1&key2value2。示例&#xff1a;http://example.com/api/resource?key1value1&key2value2 POST方法&#xf…...

Flask-Login 实现用户认证

Flask-Login 实现用户认证 Flask-Login 是什么 Flask-Login 是 Flask 中的一个第三方库&#xff0c;用于处理用户认证和管理用户会话&#xff0c;它提供了一组工具和功能&#xff0c;使得在 Flask 应用程序中实现用户认证变得更加简单和方便。 如何使用 Flask-Login 1.安装…...

基于WPF的DynamicDataDisplay曲线显示

一、DynamicDataDisplay下载和引用 1.新建项目&#xff0c;下载DynamicDataDisplay引用&#xff1a; 如下图&#xff1a; 二、前端开发&#xff1a; <Border Grid.Row"0" Grid.Column"2" BorderBrush"Purple" BorderThickness"1"…...

股票问题(至多两次购买

class Solution {public int maxProfit(int[] prices) {int[] dpnew int[4];dp[0]-prices[0];//第一次持有dp[1]0;dp[2]-prices[0];//第二次持有dp[3]0;for(int i1;i<prices.length;i){dp[0]Math.max(dp[0],-prices[i]);dp[1]Math.max(dp[1],dp[0]prices[i]);dp[2]Math.max(…...

车辆运动模型中LQR代码实现

一、前言 最近看到关于架构和算法两者关系的一个描述&#xff0c;我觉得非常认同&#xff0c;分享给大家。 1、好架构起到两个作用&#xff1a;合理的分解功能、合理的适配算法&#xff1b; 2、好的架构是好的功能的必要条件&#xff0c;不是充分条件&#xff0c;一味追求架构…...

Springboot集成feign远程调用

需求&#xff1a;在leadnews-wemedia微服务里需要调用leadnews-article微服务的接口。新建一个支持feign调用的名为heima-leadnews-feign-api的模块 heima-leadnews-feign-api的pom文件里导入openfeign依赖 <dependency><groupId>org.springframework.cloud</g…...

构建NFS远程共享存储

nfs-server:10.1.59.237 nfs-web:10..159.218 centos7,服务端和客户端都关闭防火墙和selinux内核防火墙&#xff0c;如果公司要求开启防火墙&#xff0c;那需要放行几个端口 firewall-cmd --add-port2049/tcp --permanent firewall-cmd --add-port111/tcp --permanent firew…...

X9C103SIZT1 数字电位计 IC 10K SOIC-8 参数 应用案例

X9C103SIZT1 是一款数字电位器&#xff0c;属于 X9C103 系列。它是一款100抽头的非易失性数字电位器&#xff0c;阻值为 10 kOhm&#xff0c;封装形式为 SOIC-8。这款器件常用于需要调整电子设备阻值的应用中&#xff0c;如音频设备、电源管理以及传感器校准等。 X9C103SIZT1 的…...

redis深入理解之数据存储

1、redis为什么快 1&#xff09;Redis是单线程执行&#xff0c;在执行时顺序执行 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;Redis在处理客户端的请求时包括获取(socket 读)、解析、执行、内容返回 (socket 写)等都由一个顺序串行的主线…...

用20行python写一个最简单的网站

先安装flask框架&#xff0c;cmd命令行 pip install flask&#xff0c;或pycharm -> setting -> project -> python interpreter 搜索安装 # 引入Flask框架 from flask import Flask# 实例化Flask应用 app Flask(__name__)# 定义一个路由&#xff0c;当用户访问网站…...

零基础入门篇①③ Python可变序列类型--列表

Python从入门到精通系列专栏面向零基础以及需要进阶的读者倾心打造,9.9元订阅即可享受付费专栏权益,一个专栏带你吃透Python,专栏分为零基础入门篇、模块篇、网络爬虫篇、Web开发篇、办公自动化篇、数据分析篇…学习不断,持续更新,火热订阅中🔥专栏限时一个月(5.8~6.8)重…...

微服务项目 - SpringBoot 2.x 升级到 SpringBoot 3.2.5,保姆级避坑

目录 一、前言 二、取经之路 2.1、依赖版本情况 2.2、MyBatis-Plus 依赖改变...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...