第5章-第7节-Java面向对象编程之接口

1、接口

概念:封装了一组规范、标准

生活层面:

usb接口:
    计算机厂商的角度:在设计计算机的过程中,如果多开辟几个usb口,
              则可以让更多的外接设备在同一时间都连接上我的计算机

    外接设备厂商的角度:如果想要让自己的产品能够连接访问计算机,
                则需要提供该接口的具体实现。

程序层面:

我们之后会学习jdbc技术(java连接访问数据库的技术)

jdbc内部封装了众多的接口(一组接口):
    connection接口    ==》    获取连接
    Statement接口   ==》    执行sql语句
    ResultSet接口   ==》    结果集
    ...

市面上主流的关系型数据库产品有哪些?
    mysql、oracle、db2、MsSql...

主流的数据库厂商都想要让Java去连接访问它们自己的数据库产品,
则这些数据库厂商就需要提供jdbc中内部众多接口的具体实现。


说点通俗易懂的:

多个类它们内部都需要设计某方法,但是这些类之间不存在继承关系,也不再同一个继承体系下;
根据我们之前的思路,就需要在这多个类中都定义一遍该方法,显然程序代码的复用性就无法保证的;所以Java设计者提出来接口这种技术,将该方法定义到某接口中,让这多个类都去实现该接口;则这多个类就都具备了该方法行为。

举例:
    类:Kite、Plane、Bird

    方法:fly

    接口:FlyAble


1)、接口的定义

关键字:interface

格式:
    interface 接口名{
        //...
    }


2)、类实现接口

关键字:implements

格式:
    interface 接口名{
        //...
    }

    class 类名 implements 接口名{
        //...
    }


3)、接口内部可以定义哪些成员

jdk1.8(java8)版本以前:内部只能定义常量和抽象方法

常量:
    public static final 数据类型 常量名 = 常量值;

    简化形式:

    数据类型 常量名 = 常量值;


抽象方法:
    public abstract 返回值类型 方法名(形参列表);

    简化形式:

    返回值类型 方法名(形参列表);


2、接口注意事项:

1)、定义接口需要使用关键字interface,而不是class;
2)、java8版本以前接口内部只能定义两类成员:①.常量   ②.抽象方法;
3)、类实现接口需要实现关键字implements;
4)、实现接口的类将其称为接口的实现类;
5)、类实现接口需要实现/重写接口内部所有的抽象方法,则该类就是一个具体类,之后可以实例化对象,否则该类必须被定义为抽象类;    
6)、接口不可以实例化/创建对象;
7)、接口存在的意义就是为了给类实现的;
8)、接口不是类内部没有构造方法;
9)、接口和实现类之间存在多态性的表现,具体表现如下:接口类型的引用  指向  实现类的对象;
10)、接口和接口之间可以多继承,类和类之间只能单一继承;
11)、类可以在继承父类的同时去实现多个接口,但是有语法要求,具体要求如下:
    必须先继承,后实现;格式如下:
    class 类名 extends 父类名 implements 接口名1,接口名2,...,接口名n{
        //...
    }


jdk1.8(java8)版本以后 ==> 称为java8接口相关的新特性

除了之前的常量和抽象方法,接口内部还可以定义静态方法和默认方法

静态方法:
    public static 返回值类型 方法名(形参列表){
        //...
    }

默认方法:
    public default 返回值类型 方法名(形参列表){
        //...
    }

【问题】:为什么会引入默认方法这种技术?

搭建场景:
    开发某企业级项目的过程中,在某模块内部需要定义某接口,其内部需要设计若干个抽象方法,之后有多个类(30个)都需要实现该接口,则这些类都需要在发生实现关系的一刹那,提供这若干个抽象方法的具体实现;随着项目进度往后走,需要在该接口内部去追加5个新的功能,此时如果将这5个新的功能设计为抽象方法的话,则之前和该接口发生过实现关系的30个类都会在第一时间出现编译报错的现象!并且有部分类(10个)对于这些新的功能并不关注,但是为了满足Java语言的语法要求,这30个类都需要显示的对于这些新的功能进行方法的实现 ==> 问题:影响开发效率,所以Java设计者提出了默认方法这种技术,从格式定义上我们就看出了是有方法体的方法,将这些需要新追加的功能都设计为默认方法,则之前和该接口发生过实现关系的类,都不会第一时间出现编译语法报错现象;和这些新功能都关联的类我们考虑是否要进行方法的重写等操作;不关注这些新功能的类则直接无视即可。

3、接口的静态方法和默认方法注意事项:
1)、接口内部定义的静态方法只能通过接口名对其进行访问调用;
2)、接口和父类中定义了相同名字的默认方法和非静态方法,子类继承父类的同时去实现该接口,在外界实例化子类对象,对象访问调用该方法,默认情况下,执行的是父类中的非静态方法 ==> 原因:类优先原则,如果想要访问执行的是接口中的默认方法,则必须在子类/实现类的内部;显示的重写该方法:
   格式如下:
        接口名.super.方法名(...);
3)、多个接口内部都定义了相同名字的默认方法,类同时去实现这多个接口,则在搭建时间关系的一刹那,会出现编译语法报错的现象! ==> 原因:接口冲突问题,所以我们需要显示的去重写该默认方法,这样才可以过编译。

本电子书目录:《Java基础的重点知识点全集》 

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

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

相关文章

YOLOv8改进 | 主干篇 | EfficientNetV1均衡缩放网络改进特征提取层

一、本文介绍 这次给大家带来的改进机制是EfficientNetV1主干,用其替换我们YOLOv8的特征提取网络,其主要思想是通过均衡地缩放网络的深度、宽度和分辨率,以提高卷积神经网络的性能。这种方法采用了一个简单但有效的复合系数,统一…

计算机网络【EPoll原理】

预备知识:内核poll钩子原理 内核函数poll_wait 把当前进程加入到驱动里自定义的等待队列上 ; 当驱动事件就绪后,就可以在驱动里自定义的等待队列上唤醒调用poll的进程; 故poll_wait作用:可以让驱动知道事件就绪的时…

thinkphp操作mongo数据的三种方法

总结一下当前thinkphp开发的项目中需要操作mongo: 以下是三种tp中操作mongo数据的方法: 使用tp中的扩展,方法一 Db::connect(dataname)->table(dbname)->insertAll($list); $info $connection->getTableInfo(collection); 后面…

数据加密、端口管控、行为审计、终端安全、整体方案解决提供商

PC端访问地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是关于这几个概念的解释: 数据加密:这是一种通过加密算法和密钥将明文转换为密文,以及通过解密算法和解密密钥将密文恢复为明文…

数据缓存(Redis, Spring Cache)——后端

场景:给用户端展示的数据都是通过查询数据库所得,因此数据库访问压力会随着用户访问量增大而增加,从而导致系统响应慢、用户体验差。 方法:通过Redis缓存数据,减少查询数据库操作。(Redis的数据是存储在内存…

Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(一)

最近公司对大家的开发的硬件环境进行了升级,电脑主机的配置、显示器(两台大屏显示器)变得的逼格高多了。既然电脑上的开发环境都需要重装,就打算把开发环境也升级到最新版本,要用就用最新版本。下面对升级后的开发环境…

ramdump 中的memory统计

0. 前言 ramdump是指某个时刻系统或者子系统发生crash等异常,系统将内存中的数据通过一定的方式保存下来,相当于一个系统内存快照,用以开发者离线分析系统异常问题。 ramdump 工具中有很多内存统计的脚本,本文逐一剖析内存相关的…

需求分析 :不得不重新去面对的一关。

软件需求分析 背景 深入需求产生的背景明确项目目标了解用户群体 需求优先级 需求的分类与整理明确需求优先级让团队成员都参与到需求分析中来,增加团队合作能力与效率 编写需求文档 整理好的需求编写成详细的需求文档包括需求的描述、输入/输出格式、功能流程…

Leetcode算法系列| 10. 正则表达式匹配

目录 1.题目2.题解C# 解法一:分段匹配法C# 解法二:回溯法C# 解法三:动态规划 1.题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 1.‘.’ 匹配任意单个字符 2.‘.’ 匹配任意单个字…

网络运行状况监控工具

网络运行状况是网络在其操作和环境约束范围内按预期运行的能力,但是,随着云和人工智能等技术的出现,网络变得越来越复杂,维护其 IT 基础设施是一项越来越繁琐的任务。为了确保网络可靠性,组织需要了解每个端点的运行状…

使用Ubuntu编译FFmpeg生成Android动态库/静态库

环境 我这里使用windows里的wsl2的ubuntu,使用物理机或者vmware,vbox之类的安装的ubuntu理论上也可以. gcc编译使用的环境如下: Ndk使用17 FFmpeg使用4.0.2. clang编译使用的环境如下: Ndk使用21.4 FFmpeg使用6.1 FFmpeg下载地址:https://ffmpeg.org/…

旗鼓相当的对手 - 加强版#洛谷

题目描述 现有 N ( N ≤ 1000 ) N(N\le 1000) N(N≤1000) 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 8 8 个字符的字符串,没有空格)、语文、数学、英语成绩(均为不超过 150 150 15…

Spring Boot学习:Redis发布订阅

Redis发布订阅 Redis 2.8 及以上版本实现了发布订阅的功能,发送者可以通过 PUBLISH发布消息,订阅者通过 SUBSCRIBE 订阅接收消息或通过UNSUBSCRIBE 取消订阅。当发布者发布消息到指定频道时,所有订阅该频道的订阅者都能够接收到消息。这对于…

Halcon颜色通道的处理decompose3/image_to_channels/channels _to _image

Halcon颜色通道的处理 文章目录 Halcon颜色通道的处理一. 图像的通道二. 访问通道1.访问通道2.获取通道的数量 三. 通道分离与合并1. decompose3算子2. image_to_channels 算子3. compose3算子4. channels_to_image算子 四. 处理RGB信息 由于彩色图像通常包含不止一个通道&…

《基于 Vue 组件库 的 Webpack5 配置》- 总结

前言 Vue2 项目升级到 Webpack5 后,相关的配置也有所变化!此篇以记录和总结,共同学习 Webpack ~ 推荐相关文章: 《Vue2.x 组件库 Webpack3 升 5》《Vue2.x 项目 Webpack 4 升级 5(半自动升级)》 配置 1…

LabVIEW开发LED驱动电源测试系统

LabVIEW开发LED驱动电源测试系统 本项建立一个二维激光振镜扫描控制系统,涵盖了光学系统和激光器的选择以及振镜驱动器的设计。项目的核心工作包括振镜驱动器的硬件电路设计、上位机控制软件的编写以及驱动器底层驱动软件的开发。此外,还对扫描图形的几何…

拍照就能建模!手机就能访问! 这个技术正成为宣传新手段!

随着人工智能技术的不断进步,现在可以通过拍摄照片结合AI技术来实现3D模型生成。这种技术的出现, 不仅能更加方便快捷地创建3D模型,而且还能真实复原现实中物件的质感、纹理等。同时,极大地降低了各行业对3D技术的应用门槛&#x…

中科院1区TOP,Elsevier出版社,均1-2个月录用!检索超稳!

【SciencePub学术】本期,小编给大家推荐的是一本Elsevier旗下、工程技术领域、影响因子为6.0的中科院1区TOP。其详情如下: 期刊简介 TRIBOLOGY INTERNATIONAL ISSN:0301-679X E-ISSN:1879-2464 IF(2022&#x…

ES6+ 面试常问题

一、let const var 的区别 1. var: 没有块级作用域的概念,有函数作用域和全局作用域的概念全局作用域性下创建变量会被挂在到 windows 上存在变量提升同一作用域下,可以重复赋值创建未初始化,值为 undefined 2. let&#xff1a…

最新AI系统ChatGPT网站H5系统源码,支持AI绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…