Java(十)——接口

个人简介

👀个人主页: 前端杂货铺
开源项目: rich-vue3 (基于 Vue3 + TS + Pinia + Element Plus + Spring全家桶 + MySQL)
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍖开源 rich-vue3 🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Java基础(一)Hello World,8种数据类型,键盘录入
Java基础(二)数组,方法,方法重载
Java基础(三)类和对象、构造方法
Java基础(四)字符串、StringBuffer、StringBuilder、StringJoiner
Java基础(五)ArrayList
Java基础(六)继承
Java基础(七)多态
Java基础(八)包、final、权限修饰符、静态代码块
Java基础(九)抽象类、抽象方法

文章目录

    • 前言
    • 接口的定义和使用
    • 接口中成员的特点
    • 接口和类之间的关系
    • 接口中新增的方法
      • 默认方法
      • 静态方法
      • 私有方法
    • 总结

前言

大家好,这里是前端杂货铺。

本篇文章,我们学习 接口


接口的定义和使用

  • 接口用关键字 interface 来定义
public interface 接口名 {}
  • 接口不能被实例化
  • 接口和类之间是实现关系,通过 implements 关键字表示
public class 类名 implements 接口名 {}
  • 接口的子类(实现类)要么 重写接口中的所有抽象方法,要么 是抽象类

注意:

  1. 接口和类的实现关系,可以单实现,也可以多实现
public class 类名 implements 接口名1, 接口名2 {}
  1. 实现类还可以在继承一个类的同时实现多个接口
public class 类名 extends 父类 implements 接口名1, 接口名2 {}

下面,我们把游泳定义为一个接口,实现青蛙和兔子的相关属性和行为的输出:

在这里插入图片描述

在这里插入图片描述

Swim.java

public interface Swim {public abstract void swim();
}

Animal.java

public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public abstract void eat();
}

Frog.java

public class Frog extends Animal implements Swim {public Frog() {}public Frog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("青蛙在吃虫子");}@Overridepublic void swim() {System.out.println("青蛙在游泳");}
}

Rabbit.java

public class Rabbit extends Animal{public Rabbit() {}public Rabbit(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("兔子在吃胡萝卜");}
}

Test.java

public class Test {public static void main(String[] args) {Frog f = new Frog("青蛙", 1);System.out.println(f.getName() + ", " + f.getAge());f.eat();f.swim();Rabbit r = new Rabbit("兔子", 2);System.out.println(r.getName() + ", " + r.getAge());r.eat();}
}

在这里插入图片描述


接口中成员的特点

成员变量:只能是常量,默认修饰符:public static final

构造方法:没有。

成员方法:只能是抽象方法,默认修饰符:public abstract

注意事项:

  • JDK7 以前:接口中只能定义抽象方法。
  • JDK8:接口中可以定义有方法体的方法。
  • JDK9:接口中可以定义私有方法。

Inter.java

public interface Inter {int num = 20;// 即使不加 public abstract,也会默认加上的public abstract void method();
}

InterImpl.java

public class InterImpl implements Inter {@Overridepublic void method() {System.out.println("重写的抽象方法");}
}

Test.java

public class Test {public static void main(String[] args) {System.out.println(Inter.num);InterImpl i = new InterImpl();i.method();}
}

在这里插入图片描述


接口和类之间的关系

类与类的关系:继承关系,只能单继承,不能多继承,但是可以多层继承。

类与接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。

接口和接口的关系:可以单继承,也可以多继承。

下面我们实现一下接口的多继承:

Inter1.java

public interface Inter1 {public abstract void method1();
}

Inter2.java

public interface Inter2 {public abstract void method2();
}

Inter3.java

public interface Inter3 extends Inter1, Inter2 {public abstract void method3();
}

InterImpl.java

public class InterImpl implements Inter3 {@Overridepublic void method1() {}@Overridepublic void method2() {}@Overridepublic void method3() {}
}

接口中新增的方法

默认方法

允许在接口中定义默认方法,需要使用关键字 default 修饰。——作用:解决接口升级问题。

接口中 默认方法 的定义格式:

  • 格式:public default 返回值类型 方法名(参数列表) {}
  • 范例:public default void show() {}

接口中默认方法的 注意事项

  • 默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉 default 关键字。
  • public 可以省略,default 不能省略
  • 如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写

接口中编写默认方法

InterA.java

public interface InterA {// 抽象方法public abstract void method();// 默认方法public default void show() {System.out.println("InterA 接口中的默认方法");}
}

InterAImpl.java

public class InterAImpl implements InterA{@Overridepublic void method() {System.out.println("实现类重写的抽象方法");}
}

Test.java

public class Test {public static void main(String[] args) {InterAImpl i = new InterAImpl();i.method();i.show();}
}

在这里插入图片描述


实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写:

InterA.java

public interface InterA {// 抽象方法public abstract void method();// 默认方法public default void show() {System.out.println("InterA 接口中的默认方法");}
}

InterB.java

public interface InterB {public default void show() {System.out.println("InterB 接口中的默认方法");}
}

InterAImpl.java

public class InterAImpl implements InterA, InterB {@Overridepublic void method() {System.out.println("实现类重写的抽象方法");}@Overridepublic void show() {System.out.println("实现类重写接口中的默认方法");}
}

Test.java

public class Test {public static void main(String[] args) {InterAImpl i = new InterAImpl();i.method();i.show();}
}

在这里插入图片描述

PS:不重写,会报错,因为此时不知道调哪个接口的默认方法

在这里插入图片描述


静态方法

允许在接口中定义静态方法,需要使用关键字 static 修饰。

接口中 静态方法 的定义格式:

  • 格式:public static 返回值类型 方法名(参数列表) {}
  • 范例:public static void show() {}

接口中静态方法的 注意事项

  • 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用。
  • public 可以省略,static 不能省略。

Inter.java

public interface Inter {public abstract void method();public static void show() {System.out.println("Inter 接口中的静态方法");}
}

InterImpl.java

public class InterImpl implements Inter{@Overridepublic void method() {System.out.println("InterImpl 重写的抽象方法");}public static void show() {System.out.println("InterImpl 实现类中的 show 方法");}
}

Test.java

public class Test {public static void main(String[] args) {// 调用接口中的静态方法Inter.show();// 调用实现类中的静态方法InterImpl.show();}
}

在这里插入图片描述


私有方法

接口中私有方法的定义格式:

  • 范例1:private void show() {}
  • 范例2:private static void method() {}

Inter.java

public interface Inter {public static void show1() {System.out.println("show1 方法");show3();}public static void show2() {System.out.println("show2 方法");show3();}private static void show3() {System.out.println("仅允许此java文件里的静态方法调我 --- haha");}
}

Test.java

public class Test {public static void main(String[] args) {Inter.show1();Inter.show2();}
}

在这里插入图片描述


总结

本篇文章我们学习了接口的定义、特点及相关使用,是不是收获满满呢!

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. Java 基础(bilibili-黑马程序员)
  2. 菜鸟教程–Java

在这里插入图片描述


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

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

相关文章

JAVA零基础学习3(Scanner类,字符串,StringBuilder,StringJoinder,ArrayList成员方法)

JAVA零基础学习3 Scanner类输入示例代码代码解释完整代码1. 读取字符串2. 读取整数3. 读取浮点数4. 读取布尔值5. 读取单个单词6. 读取长整型数7. 读取短整型数8. 读取字节数注意事项总结 API 字符串解释示例解释解决方法示例:使用 StringBuilder String…

口碑爆棚的高分法国电影,一起在光影中领略法式魅力吧!

文章目录 引言《与玛格丽特的午后》(网友评分:9.1)《午夜巴黎》(网友评分:8.3)《玫瑰人生》(网友评分:8.4)《双姝奇缘》(网友评分:8.7)《巴黎淘气帮》(网友评分:8.6)《触不可及》(网友评分:9.3)《爱在日落黄昏时》(网友评分:8.9)《悲惨世界》(网友评分:…

VScode使用Github Copilot插件时出现read ECONNREST问题的解决方法

文章目录 read ECONNREST查看是否仍是 Copilot 会员查看控制台输出网络连接问题浏览器设置问题笔者的话 read ECONNREST 最近使用 Copilot 时一直出现 read ECONNREST 问题,这个表示连接被对方重置了,就是说在读取数据时连接被关闭。 我首先怀疑是不是…

[023-2].第2节:SpringBoot中接收参数相关注解

我的后端学习大纲 SpringBoot学习大纲 1.1.基本介绍: SpringBoot接收客户端提交的数据、参数会使用的一些注解: 1.PathVarible2. RequestHeader3.RequestParam4.CookieValue5.RequestBody6.RequestAttribute 1.2.接收参数相关注解与应用实例:…

无人机制造工艺流程详解

一、需求分析 无人机制造的第一步是需求分析。这一阶段主要明确无人机的使用场景、功能要求、性能指标以及成本预算等。通过与客户或项目团队的深入沟通,确保对无人机的需求有全面而准确的理解。同时,也需要进行市场调研,了解同类型产品的特…

科普文:docker基础概念、软件安装和常用命令

docker基本概念 一 容器的概念 1. 什么是容器:容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等。也可以说:容器是一种轻量级虚拟化的技术。 2. 容器相对于kvm虚…

如何使用 SQLite ?

SQLite 是一个轻量级、嵌入式的关系型数据库管理系统(RDBMS)。它是一种 C 库,实现了自给自足、无服务器、零配置、事务性 SQL 数据库引擎。SQLite 的源代码是开放的,完全在公共领域。它被广泛用于各种应用程序,包括浏览…

【C语言】函数的递归

目录 一、什么是递归 二、递归的思想 三、递归的限制条件 四、递归中的栈溢出 五、递归举例 (1)例1:n的阶乘 (2)例子2:顺序打印一个数的每一位 六、递归和迭代 七、拓展题目 (1&#…

Chainlit一个快速构建成式AI应用的Python框架,无缝集成与多平台部署

概述 Chainlit 是一个开源 Python 包,用于构建和部署生成式 AI 应用的开源框架。它提供了一种简单的方法来创建交互式的用户界面,这些界面可以与 LLM(大型语言模型)驱动的应用程序进行通信。Chainlit 旨在帮助开发者快速构建基于…

如何知道一个字段在selenium中是否可编辑?

这篇文章将检查我们如何使用Java检查selenium webdriver中的字段是否可编辑。 我们如何知道我们是否可以编辑字段?“readonly”属性控制字段的可编辑性。如果元素上存在“readonly”属性,则无法编辑或操作该元素或字段。 因此,如果我们找到一…

强大的开源网络攻击面分析工具:Hetty

Hetty:深入网络的每一个角落,Hetty让安全漏洞无处遁形。- 精选真开源,释放新价值。 概览 Hetty作为一个专为网络攻击面分析而设计的开源HTTP/1.1客户端,其设计初衷是为了帮助安全研究人员和渗透测试人员深入挖掘潜在的网络漏洞。…

[网鼎杯 2020 朱雀组]Nmap(详细解读版)

这道题考察nmap的一些用法,以及escapeshellarg和escapeshellcmd两个函数的绕过,可以看这里PHP escapeshellarg()escapeshellcmd() 之殇 (seebug.org) 两种解题方法: 第一种通过nmap的-iL参数读取扫描一个文件到指定文件中第二种是利用nmap的参数写入we…

NTC测温

前言 假设已知ad-温度转换表ad_table[100]; 数组元素ad_table[0] ~ ad_table[99] 对应温度0 ~ 99℃;已知MCU检测到NTC两端电压ad值位temp_ad,请写出将temp_ad转换成温度值的程序代码,要求温度值精确到0.1℃ 代码 为了将AD值转换为精确到0.1℃的温度值…

AMQP-核心概念-5

本文参考以下链接摘录翻译: https://www.rabbitmq.com/tutorials/amqp-concepts 消息确认(Message Acknowledgements) 消费者应用,就是接收和处理消息的应用。它们偶尔会处理个别消息失败,断开与服务器之间的连接或许…

数据库基础--概念模型

文章目录 概念模型回顾概念结构设计基本概念概念模型中的几个基本概念联系——实体集之间的对应关系讨论:怎样寻找信息世界中的实体和联系?实体和联系的举例概念模型的设计概念模型的设计方法与步骤概念结构设计步骤合并E-R图时的冲突解决方法练习&#…

二叉树习题leetcode 572. 另一棵树的子树

题目链接:572. 另一棵树的子树 二叉树遍历综合问题 题意 给定两棵树,判断第二棵树是否为第一颗树的子树。 思路 用到了100. 相同的树 的思路,把给定的二叉树,每个节点都和subRoot都做一次相同的树的比较,只要正确&…

Llama + Dify,在你的电脑搭建一套AI工作流

theme: smartblue 点赞 关注 收藏 学会了 本文简介 最近字节在推Coze,你可以在这个平台制作知识库、制作工作流,生成一个具有特定领域知识的智能体。 那么,有没有可能在本地也部署一套这个东西呢?这样敏感数据就不会泄露了&…

使用两台虚拟机分别部署前端和后端项目

使用两台虚拟机分别部署前端和后端项目 1 部署方案2 准备两台虚拟机,并配置网络环境3 部署后端项目3.1 打包服务3.2 上传jar包到服务器3.3 集成Systemd3.3.1 移动端服务集成Systemd3.3.2 后台管理系统集成Systemd 4 配置域名映射5 部署前端项目5.1 移动端5.1.1 打包…

Kettle下载安装

环境说明 虚拟机:Win7;MySql8.0 主机:Win11;JDK1.8;Kettle 9.4(Pentaho Data Integration 9.4)(下载方式见文末) 安装说明 【1】解压后运行Spoon.bat 【2】将jar包 复…

DjangoRF-6-项目模块projects模型

首先,这是个新模块,在apps下创建projects 1.1、django-admin startapp projects 1.2进行注册 ‘apps.projects.apps.ProjectsConfig’ 进行接口编写的过程中,落入数据库的字段相同的有很多我们要在utils文件下进行闯进模型鸡肋 from django…