Java 接口 简要说明举例

Java 接口

Java 接口(重要)

基本定义:

如果一个类中只有抽象方法和全局常量所组成;在这类情况下不会将其定义为抽象类,而只会将其定义为“接口”;严格来讲:接口就属于一个特殊的类,而且这个类里面只有抽象方法和全局常量(无构造方法)

接口定义需要使用interface 关键字。

由于接口里面存在有抽象方法,所以接口不可进行对象实例化(new)

1、 接口必须要有子类,但是此时一个子类可以使用implements关键字实现多个接口

2、 接口的子类(不是抽象类),必须要覆写接口中的全部抽象方法

3、 接口的对象可以利用子类对象的向上转型进行实例化操作

实际上 A和B接口没有直接联系,但是两个接口拥有同一个子类X;因为最终实例化的是X子类,而子类属于B类的对象,所以以上的Demo代码是可行的。

对于子类而言除了接口之外,还可能会继承抽象类,所以说一个子类又要继承抽象类又要实现接口的化;先使用extends实现继承,再使用implements实现接口

对接口而言组成的内容就是抽象方法和全局常量,所以很多的时候也有一些人为了省略,可以不用写上 abstract 或 public static final 声明;并且再方法上是否写public结果都是一样的,因为再接口中只能够使用唯一的public访问权限。

接口定义的不同

完整

interface A { public static final String MSG = "Hello" ; public abstract void fun () ; }

简短

interface A { String MSG = "Hello" ; public void fun () ; }

**在接口定义抽象方法时可省去public但为了防止访问权限的报错和混淆,不建议省去**

一个抽象类只可以继承一个抽象类,但是反之:一个接口却可以使用extends关键字同时继承多个接口(接口不可以继承抽象类)

从继承关系角度:抽象类的限制比接口多;

一个抽象类只能够继承也给抽象的父类,而接口没有这个限制

一个子类只能够继承一个抽象类,却可以实现继承多个接口

【Java接口主要功能就是解决了继承的单继承局限问题】

虽然接口的定义是只包含定义抽象方法和全局常量,但是所有的限制是不受内部的影响;所以再接口中也可以定义普通内部类、抽象内部类、内部接口

**在一个接口的内部如果使用了static定义内部接口,等同一个外部接口

1)接口再实际开发中三大核心作用:

定义不同层之间的操作标准

表示一种操作的能力

表示将服务端的远程方法视图暴露给客户端

标准定义:(定义不同层之间的操作标准)

在Java中,也存在程序标准,而标准就是由接口定义的;通俗的理解为:接口类即是一个标准,子类则依靠接口类而产出的依赖(接口)

工厂设计模式:Factory

interface Fruit { public void eat() ; } class Apple implements Fruit { public void eat() { System.out.println("eat...") ; } } public class Demo { public static void main(String [] args) { Fruit f = new Apple() ; f.eat() ; } }

interface Fruit { public void eat() ; } class Apple implements Fruit { public void eat() { System.out.println("Apple...") ; } } class Orange implements Fruit { public void eat() { System.out.println("Orange...") } } public class Demo { public static void main(String [] args) { Fruit f = new Orange() ; f.eat() ; } }

在Java过程中,最需要关心的就是如何取得一个Fruit接口对象,而不是关心对象是被谁实例化的。

一旦子类进行扩充,main的操作和实例化+调用则会发生变化。

子类对于mian完全透明,所有接口对象都是通过Factory类(工厂类)取得的,如果日后要扩展新的子类对象,则只需要修改工厂类即可,但是客户端调用则不会发生变化。

Fruit f = Factory.getInstance(****) ;中只需要给工厂类传递调用子类名即在工厂类通过if判断调用的子类名进行对子类进行调用操作。

main可以看见接口类和工厂类,接口类可以看见子类和子类方法,工厂类可以调用子类和子类方法;main通过调用工厂类而使用接口子类。

总结:即是通过工厂类实现对接口子类的操作,在子类发生变化时只需要改变工厂类代码即可,不需要对main客户端进行过多承重的代码设计(不需要再一一对接口子类声明实例化)

代理设计模式:

代理设计模式的核心在于有一个主题操作接口(可能有多种方法);核心业务主题只完成核心功能;而代理主题负责完成与核心业务有关的操作。

抽象类与接口的区别:

区别

抽象类

接口

关键字

abstract class

interface class

组成

构造方法、普通方法、抽象方法、static方法、常量、变量

抽象方法、全局常量

子类使用

class 子类 extends 抽象类

class 子类implements 接口

子类关系

抽象类可以实现多个接口

接口不可以继承抽象类 但可以继承多个父类接口

权限

可以使用三类权限

仅可以使用public权限

限制

只能继承一个抽象类(单继承)

可以实现多个接口

子类

抽象类和接口都必须有子类,子类必须要覆写全部的抽象方法

实例化对象

依靠子类对象的向上转型进行对象的实例化

经过比较发现:抽象类中支持的种类绝对要高过接口支持的种类;但是抽象类的单继承局限,导致抽象类的缺点大于优点以及接口的引用高于抽象类。

n 在进行公共操作的时候,一定要定义出接口

n 有了接口就需要利用子类完善方法

n 自己写的接口,不要关键字new直接实例化接口子类(用工厂类完成)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Camtasia2023最好用的电脑屏幕录制软件

Camtasia2023是市场上最好的录像机和屏幕录制软件之一。强大的软件视频编辑程序的Camtasia 适用于Windows和iOS。 它支持多种流行的媒体格式,并对您创建的视频提供令人印象深刻的控制范围。3000多万专业人士在全球范围内使用Camtasia展示产品,教授课程&a…

文字的显示

文字的显示 文章目录 文字的显示1.文字编码方式2.英文和汉字的点阵显示3.显示中文“中”和“A”show_font.c结果 1.文字编码方式 数字>代表什么->显示为什么 GBK国标拓展 下列代码用不同编码方式保存utf-8.c ansi.c #include <stdio.h>int main(int argc ,char *…

网络编程之 Socket 套接字(使用数据报套接字和流套接字分别实现一个小程序(附源码))

文章目录 1. 什么是网络编程2. 网络编程中的基本概念1&#xff09;发送端和接收端2&#xff09;请求和响应3&#xff09;客户端和服务端4&#xff09;常见的客户端服务端模型 3. Socket 套接字1&#xff09;Socket 的分类2&#xff09;Java 数据报套接字通信模型3&#xff09;J…

基于Open3D的点云处理2-Open3D的IO与数据转换

三维数据类型 点云 某个坐标系下的点数据集&#xff0c;每个点包括三维坐标X&#xff0c;Y&#xff0c;Z、颜色、分类值、强度值、时间等信息&#xff1b; 储存格式&#xff1a;pts、LAS、PCD、xyz、asc、ply等&#xff1b;Mesh 多边形网格&#xff0c;常见的是三角网格&#…

有研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具(上)

导语&#xff1a;研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具。 Dell PFS BIOS提取器 介绍 解析 Dell PFS BIOS 映像并提取其 SPI/BIOS/UEFI 固件组件。它支持所有Dell PFS 修订版和格式&#xff0c;包括最初在 ThinOS 包中LZMA压缩、ZLIB压缩或拆分成块的格式。输出…

Kafka上的优化经验

1. 平滑扩容 Motivation kafka扩容⼀台新机器的流程 假如集群有 3 个 broker &#xff0c;⼀共有 4 个 TP &#xff0c;每个 3 副本&#xff0c;均匀分布。现在要扩容⼀台机器&#xff0c; 新 broker 加⼊集群后需要通过⼯具进⾏ TP 的迁移。⼀共迁移 3 个 TP 的副…

Spring Boot集成ShardingSphere实现按月数据分片及创建自定义分片算法 | Spring Cloud 44

一、前言 在前面我们通过以下章节对数据分片有了基础的了解&#xff1a; Spring Boot集成ShardingSphere实现数据分片&#xff08;一&#xff09; | Spring Cloud 40 Spring Boot集成ShardingSphere实现数据分片&#xff08;二&#xff09; | Spring Cloud 41 Spring Boot集…

权限提升:信息收集 .(Linux系统)

权限提升&#xff1a;信息收集. 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因此通过 Webshel…

1.1 基于B/S 结构的 Web 应用

文章目录 1.1 基于B/S 结构的 Web 应用1.2 JDK安装与配置1.3 服务器Tomcat下载与安装1.4 Eclipse安装与使用1.4.1 Eclipse 下载及创建Dynamic Web Project1.4.2 Eclipse 中的编码问题1.4.3 将Tomcat和Eclipse相关联1.4.4 Eclipse 自动部署项目到 Tomcat 的 webapps 目录 1.5 My…

【AWS入门】AWS Lamda

目录 创建一个Lamda函数用Lamda函数控制启停EC2实例创建一台EC2实例创建角色创建lamda函数 使用Amazon EventBridge计划启停实例创建EventBridge 用户往S3存储桶上传图片文件&#xff0c;触发Lambda函数&#xff0c;将图片压缩并上传至另一个存储桶创建两个存储桶通过Cloudform…

【SpringMVC】| SpringMVC执行流程原理 | 常用注解 剥析

MVC目录 一. &#x1f981; MVC模型二. &#x1f981; SpringMVC1. SpringMVC执行流程&#xff08;重点&#xff09;Ⅰ. SpringMVC四大组件Ⅱ. 执行流程 2. RequestMapping3. RequestParam4. ReuqestHeader & CookieValue5. RESTful风格支持Ⅰ. 传统 vs restfulⅡ. PathVar…

【网络技术】什么是CNI

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 Never look back unless you are planning to go that way. 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用…

【应急响应】日志自动提取分析项目ELKLogkitLogonTracerAnolog等

日志自动提取-七牛Logkit&观星应急工具 1、七牛Logkit&#xff1a;(Windows&Linux&Mac等) https://github.com/qiniu/logkit/ 支持的数据源&#xff08;各类日志&#xff0c;各个系统&#xff0c;各个应用等&#xff09; File: 读取文件中的日志数据&#xff0c;包…

面了一个4年经验的测试工程师,自动化都不会也要15k,我也是醉了····

在深圳这家金融公司也待了几年&#xff0c;被别人面试过也面试过别人&#xff0c;大大小小的事情也见识不少&#xff0c;今天又是团面的一天&#xff0c; 一百多个人都聚集在一起&#xff0c;因为公司最近在谈项目出来面试就2个人&#xff0c;无奈又被叫到面试房间。 整个过程…

数说热点 | 跟着《长月烬明》起飞,今年各地文旅主打的就是一个听劝

近日&#xff0c;随着热播剧《长月烬明》的爆火&#xff0c;蚌埠、宣城、敦煌等多个与剧情梦幻联动的宝藏城市被带飞&#xff0c;各地热心网友也纷纷催促自家文旅局赶紧“蹭飞”&#xff0c;《长月烬明》以一己之力打造了影视文旅融合的新样板。 仙偶剧特效天花板&#xff0c;…

《互联网安全产品漏洞管理规定》

《网络产品安全漏洞管理规定》由工业和信息化部、国家互联网信息办公室、公安部联合印发&#xff0c;自2021年9月1日起施行。 该《规定》明确&#xff0c;任何组织或者个人不得利用网络产品安全漏洞从事危害网络安全的活动&#xff0c;不得非法收集、出售、发布网络产品安全漏洞…

Redis高频面试题,使用场景

一、缓存 1、什么是缓存穿透 ? 怎么解决 ? 缓存穿透 查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库。 解决 方案一&#xff1a;缓存空数据&#xff0c;查询返回的数据为空&#xff0c;仍把这个空结果进行…

【JavaEE】认识线程

目录 1、什么是线程 2、为什么引入线程 2.1、线程的优缺点 3、CPU的工作原理 4、线程和进程的关系 4.1、线程和进程的入口函数 4.2、线程独享的资源 1、什么是线程 一个进程中可以有一个或者多个线程&#xff0c;每个线程都是一个独立的执行流。多个线程之间&#xff0c;也…

3.rabbitMQ之发布确认高级和整合springboot(重要)找了很多博客整理出来的

1.极端情况下 rabbitMQ需要重启,导致消息投递失败(生产者发消息全部丢失)(交换机或者队列出问题) 生产者需要把数据放到缓存,用定时任务重新发送 解决方法: 0.必须配置文件写 spring.rabbitmq.publisher-confirm-typecorrelatedspring.rabbitmq.publisher-returnstruecorrelati…

Word Embedding

One-hot-encoding 缺点 1.向量维度和向量个数很大&#xff0c;假设有1w个token的话&#xff0c;向量个数和维度就都是1w 2. 语义相近的词的向量并不相似 Word Embedding 核心思想&#xff1a;可以通过上下文理解单词的语义 predection-based方法 使用前一个单词预测下一个…