深入理解Java接口(一)

java lambda表达式和函数式接口使用示例 import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.function.Consumer; import org.junit.Test; /** * @author gm * Lambda 表达... 阅读详情

一、Java接口的基本内容

[1].Java编程语言中不支持多重继承(即Java中一个类不能有多于一个的直接父类),但可以实现多个接口,这就间接地实现了多重继承。

[2].接口(Interface)将产生一个完全抽象的类,它是用来建立类与类之间的协议的,其内部只提供调用方法的形式(创建者确定方法名、参数列表及返回类型),而没有提供任何具体的方法体。具体的实现方法(该接口中的所有方法)需要在遵循该特定接口的类中进行实现。创建接口需要使用关键字interface,而创建一个遵循某接口的类则需要使用关键字implements。

 

二、Java接口的基本特征

    [1].接口可以包含域,但是这些域不是接口的一部分,它们的值被存储在该接口的静态存储区内;域隐式为public、static、final的(域名通常大写且单词之间以下划线连接),域不能是“空final”,在使用之前必须显式地初始化,但可以被非常量表达式初始化。

    [2].当实现一个接口时,接口中的方法必须是public的,通常隐式地为public及abstract的。

    [3].接口必须通过类来实现它的抽象方法,且该类必须实现该接口中的所有方法,否则该类仍是一个抽象类。

    [4].接口因为没有构造器而不能进行实例化,但运行定义接口类型的引用变量,该引用变量实现了该接口的类的实例。比如:

    Interface Base{/*…*/}

    Public class Derived implements Base{/*…*/}

    //! Base b=new Base();error:接口不能进行实例化

    Base b=new Derived();//引用变量b被定义为类型Base,引用了Derived实例

    [5].一个类只能继承一个父类,但可以实现多个接口,并可以向上转型为每个接口(因为每个接口都是一个独立的类型)。按照先类后接口(多个接口以逗号分开)的顺序进行实现。例如:

Class BaseClass{}

    Interface BaseIntfaceA{}

    Interface BaseIntfaceB{}

    Public class Derived extends BaseClass

implements BaseIntfaceA, BaseIntfaceB{}

    [6].接口可以嵌套,嵌套在接口中的接口自动为public而不能修改为private。当实现某个接口时,不需要实现嵌套在其内部的任何接口。类中的private接口不能在定义它的类之外被实现。

    [7].接口可以很好地应用于松耦合软件系统构建之中。通过接口可以很方便地对已经存在的系统进行自下而上的抽象,对于任意的两个类,只要他们存在有相同的功能,就能从中抽象出一个接口类型,而不用理会它们是否源自同一个父类。对于两个系统,通过接口交互可以获得比抽象类交互更好的松耦合特性。

 

三、接口与抽象类的异同点

    [1].相同点:

<1>.二者都包含有描述系统能提供服务的抽象方法,都不提具体实现的方法体,都不能被实例化。

<2>.都位于继承树的上层,都代表系统的抽象层。当系统使用继承树上的类时,应尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统的松耦合程度。

    [2].不同点:

<1>.抽象类中可以定义调用方法的方法体以免在子类中的重复定义,对子类中修改方法体不会造成影响;对于接口,一旦接口公布就必须保持稳定,因为随意向接口中添加方法会直接影响到子类的功能,此时子类要么实现新增的方法,要么就声明为抽象类,而声明为抽象类就意味着该类不能进行实例化,也就限制了该类的应用了。

<2>.一个类只能有一个直接父类(此父类可以是抽象类),但它可以实现多个接口。当子类覆盖父类的调用方法或隐藏父类的成员变量及静态方法时,Java虚拟机采用不同的绑定机制,为了简化系统设计的复杂性和绑定机制,Java禁止多重继承;对于接口,其内部只含有抽象方法而没有实例变量及静态方法,即便一个类实现多个接口也不会增加绑定机制的复杂性。

 

四、接口和抽象类的使用原则

    [1].使用接口作为系统与外界交互的窗口。

    [2].接口必须保持稳定性。

    [3].使用抽象类来定制系统中扩展点。

 

Reference:

       Bruce Eckel. <<Thinking in Java>>4-th Edition

http://baidu/zhidao HiЁnd. Java接口

张广彬. Java课程设计案例精编. 清华大学出版社

巨量千川M-API实战:5分钟搞定短视频计划数据自动获取(Python版) 本文详细介绍了如何利用巨量千川M-API和Python快速搭建自动化工具,实现短视频计划数据的自动获取。通过实战代码演示了从环境准备、Token管理到核心数据接口调用的完整流程,帮助电商运营和技术开发者告别手动导出,高效完成数据汇总与分析。 阅读详情

相关推荐

电脑的kernelbase.dll故障怎么处理?kernelbase.dll是什么文件

kernelbase.dll​是一个系统文件,属于Microsoft Windows操作系统的一部分。该DLL(动态链接库)文件包含了许多基本且低级的系统函数,这些函数被Windows上运行的各种程序和进程调用。kernelbase.dll通常与Kernel32.dll紧密相关,它是实现许多Windows API(应用程序编程接口)的封装。这些API涉及到内存管理、输入输出操作、进程和线程管理以及其他许多核心的操作系统功能。

电脑修复君的博客 4533

Java 接口

Java 接口 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。...

aldsot0997的博客 822

unet学习笔记(milesial/Pytorch-UNet)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 unet学习笔记(milesial/Pytorch-UNet)原理讲解unet_parts.py内容predict.py内容 所用到的代码Pytorch-UNet/predict.py at master · milesial/Pytorch-UNet ·GitHub 原理讲解 蓝/白色框表示 feature map; 蓝色箭头表示 3x3 卷积,用于特征提取; 灰色箭头表示skip-connection,用于特征融合; 红色箭头.

weixin_67138138的博客 2553

Java接口介绍

Java接口介绍

cnds123的专栏 6077

【遥感数字图像处理(朱文泉)】第四章 变换域处理方法

变换域的处理方法

甜子yu的博客 4311

3D iToF深度分辨率测量

本文展示了RGB-D传感器在三维测量中的高精度表现。标靶深度图显示其具备清晰、低噪、无干扰的特性,点云数据完整度高且轮廓分明。该技术已成功应用于物流(体积测量误差<1%)、工业(高反光部件装配检测)和农业(果蔬成熟度分级)等领域,验证了其硬件和算法的可靠性,能够满足不同场景下的三维测量需求。

dream it possible 252

java 接口 详解

java 接口 内容分享,本篇博文为java 面向对象三大特性——多态篇的补充。

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 3万+

手把手教你学PCIE-- 热插拔电路设计与实现方案

PCIe热插拔(Hot-Plug)技术允许用户在系统运行时安全地插入或移除设备,而无需重启系统。本文将深入讲解热插拔电路的设计要点、关键器件选型及信号协议规范,涵盖机械结构、电气保护和电源管理三大核心模块。​。

MHD0815的博客 440

常见的接口汇总

摘要:记录一些常用的接口

panpan_jiang1的博客 1万+

太空安全卫士:基于YOLOv5的空间态势感知系统(实现轨道碰撞预警与太空环境保护)

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护宇宙安全”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了航天监测的哪些痛点、YOLOv5在太空目标检测中的性能优势、系统未来能怎么优化(比如对接航天监测网络、实现实时轨道预测)。未来,这个系统还能往“更智能”的方向发展:比如结合轨道计算预测碰撞风险、开发移动端APP让天文爱好者参与太空垃圾上报、在航天任务中实现全自动避障决策……想象空间很大。

m0_71589036的博客 90

【ACP】2025-最新-疑难题解析-1

即用户手动释放时,因实例释放保护开启,不会释放该 ECS 实例(不同云厂商具体实现有差异,但题目场景下选 C )。结合题目中标记,答案为。综上,答案选 B。综上,答案选 C。综上,答案选 D。综上,答案选 A。综上,答案选 A。综上,答案选 C。综上,答案选 D。综上,答案选 A。

jundao1997的专栏 365

java 为什么使用接口_java_深入理解Java中的接口,一. 为什么要使用接口 假如有 - phpStudy...

深入理解Java中的接口一. 为什么要使用接口假如有一个需求:要求实现防盗门的功能。门有"开"和"关"的功能,锁有"上锁"和"开锁"的功能。分析:首先防盗门是一个门,门有开门和关门的功能,还有一把锁,锁有开锁和上锁,按照面向对象的编程的思想,我们会将门和锁都作为一个类而单独存在,但是,不能让防盗门继承自门的同时又继承自锁,防盗门不是锁,不符合继承中is a的关系,在java中支持单继承。那么我们如...

weixin_39846186的博客 173

华为OD机试新系统真题【计算电动车续航里程】

华为OD机试 新系统真题【计算电动车续航里程】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【计算电动车续航里程】多语言题解。

qq_45776114的博客 781

深入理解Java泛型(一)——认识泛型接口和类

文章目录一、Type接口二、GenericDeclaration接口三、Class类四、Method类五、Field类六、ParameterizedType接口七、TypeVariable接口八、WildcardType接口九、GenericArrayType接口 文章内容出自微信公众号:路人甲Java(后面附有原文地址),部分内容自己编写。 工欲善其事必先利其器。本系列分为两篇,此篇带大家了解一...

weixin_42572590的博客 967

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深入理解Java的接口和抽象类(一)

小小柚 184

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java基础知识学习总结(一)---深入理解Java的接口和抽象类

深入理解Java的接口和抽象类

复制乔布斯 495

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java interface 函数_深入理解lambda表达式与@FunctionalInterface函数式接口(一)

一、集合遍历与Lambda表达式 引入package com.java.design.java8;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.conte...

weixin_33576058的博客 603

Java中接口继承Object吗?

看网上很多说接口并不继承Object类,下图是接口编译的class文件,从class文件的父类索引可以看出接口继承了Object类。 关于父类索引的知识,我是参考自《深入理解Java虚拟机》第二版6.3.4节。 ...

tengfeixiaoao的博客 5979

JAVA接口练习——编程例题之天气预报

//weatherState.java public interface weatherState{ public void showState(); }//cloudyLittleState.java public class cloudyLittleState implements weatherState{ public void showState(){ System.out.print...

LANCE的博客 3411

深入理解 Java Lambda

Java Lambda Java Lambda Lambda Lambda 函数式接口 Lambda为什么可以做到类型推导?可以做到什么程度? 方法应用 Lambda和匿名类是什么关系?仅仅是语法糖? Java编译器如何处理Lambda? Lambda lambda名称的由来 许多年前,在计算机出来之前,有位名叫 Alonzo Church 的逻辑学家,他想证明 什么样...

何欣澄的博客 1891

java接口实例化问题

我们都知道,在java中接口不能直接实例化。但是有的时候,我们会看到这种匿名内部类(假象的所谓内部类)实例化的代码。如下:    绑定View对象的监听方法调用     View.setOnClickListetener(new OnClickListener() { @Override

stevenhu_223的专栏 2万+

Java的几种常见接口用法

Java的几种常见接口用法 今天在看阎宏的《 Java与模式》,里面对 java的 几种 接口的常用方法的总结: 单方法接口:只含有一个方法,做特定的事情。例子:Runnable接口的run()方法 标记接口:没有任何方法和...

chiwanqi9869的博客 212

Java抽象类实现接口可以不用实现方法

众所周知,在实现类中实现接口时,必须全部重写接口的抽象方法,如 public interface MyInter{   function abstract void A();   function abstract voidB(); } //实现类中,必须全部重写A和B方法 public class MyClass implements MyInter{   public void A(){}   public void B(){} } 如果不重写接口的方法可以吗?可以,但实现类一定要是一个

jiangkun0331的博客 7713

多态,抽象类,接口

多态,抽象类,接口

cvpatient的博客 231

Java泛型接口以及案例说明(四)

Java泛型接口

奋斗的菇凉的博客 504
上一篇: 设计模式之java接口和java抽象类
下一篇: 用java实现从文本文件批量导入数据至数据库
Hack_Bug
博客等级 码龄15年 34粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值