Java SE入门及基础(35)

接口

1. 概念

        在软件工程中,软件与软件的交互很重要,这就需要一个约定。每个程序员都应该能够编写实现这样的约定。接口就是对约定的描述。
In the Java programming language, an interface is a reference type, similar to a class, that can contain only constants, method signatures, default methods, static methods, and nested types. Method bodies exist only for default methods and static methods. Interfaces cannot be instantiated—they can only be implemented by classes or extended by other interfaces
Java 编程语言中,接口是类似于类的引用类型,它只能包含常量,方法签名,默认方法,静态方法和嵌套类型。 方法主体仅适用于默认方法和静态方法。 接口无法实例化- 它们只能由类实现或由其他接口扩展。
An interface declaration can contain method signatures, default methods, static methods and constant definitions. The only methods that have implementations are default and static methods.
接口声明可以包含方法签名,默认方法,静态方法和常量定义。 具有实现的方法是默认方法和静态方法。
从上面的描述中可以得出: 接口中没有构造方法。

2. 接口定义

语法
[ public ] interface 接口名 {
                [ public static final ] 数据类型 变量名 = 变量的值 ; // 接口中定义变量,该变量是静态常量,在定义的时候必须赋值
                
                返回值类型 方法名 ([ 参数列表 ]); // 定义接口方法
                default 返回值类型 方法名 ([ 参数列表 ]){ // 接口中定义的默认方法,必须在 JDK8 及以上版本使用
                        [ return 返回值 ;]
                }
                static 返回值类型 方法名 ([ 参数列表 ]){ // 接口中定义的静态方法,必须在 JDK8 及以上版本使用
                        [ return 返回值 ;]
                }
                private 返回值类型 方法名 ([ 参数列表 ]){ // 接口中定义的私有方法,必须在 JDK9 及以上版本使用
                        [ return 返回值 ;]
                }
}
package com . we . interfaceclass ;
interface Test {
        public static final int number = 10 ;
        public abstract void show ();
        public default int plus ( int a , int b ){
                return a + b ;
        }
        public static int multiply ( int a , int b ){
                return a * b ;
        }
        private String getName (){
                return "admin" ;
        }
}
示例
使用接口描述人有名字
package com . we . interfaceclass . person ;
public interface Person {
        String getName (); // 获取人的姓名
}
使用接口描述演员能表演
package com . we . interfaceclass . person ;
public interface Actor {
        void performance (); // 演员表演
}

3. 接口继承

语法
[ public ] interface 接口名 extends 接口名 1 , 接口名 2 ,... 接口名 n {
}
示例
使用接口继承描述演员是人
package com . we . interfaceclass . person ;
public interface Actor extends Person {
        void performance (); // 演员表演
}
使用接口继承描述歌手是人
package com . we . interfaceclass . person ;
public interface Singer extends Person {
        void sing (); // 唱歌
}
使用接口继承描述艺人既是演员也是歌手
package com . we . interfaceclass . person ;
public interface Artist extends Actor , Singer {
        void endorsement (); // 代言
}
        注意: 接口可以多继承,这是Java 唯一可以使用多继承的地方。接口包含的变量都是静态常量,接 口中包含的方法签名都是公开的抽象方法,接口中的默认方法和静态方法在 JDK8 及以上版本才能定 义,接口的私有方法必须在 JDK9 及以上版本才能定义。接口编译完成后也会生成相应的 class 文件。

4. 接口实现

实现接口语法
访问修饰符 class 类名 implements 接口名 1 , 接口名 2 ,... 接口名 n {
}
A class that implements an interface must implement all the methods declared in the interface.
实现接口的类必须实现接口中声明的所有方法。
        一个类如果实现了一个接口,那么就必须实现这个接口中定义的所有抽象方法(包括接口通过继承关系继承过来的抽象方法),这个类被称为接口的实现类或者说子类。与继承关系一样,实现类与接口之间 的关系是 is-a 的关系。
示例
使用实现接口的方式描述娱乐明星是艺人
package com . we . interfaceclass . person ;
public class EntertainmentStar implements Artist {
        private String name ;
        public EntertainmentStar ( String name ) {
                this . name = name ;
        }
        @Override
        public void endorsement () {
                System . out . printf ( " 娱乐明星 %s 代言 \n" , getName ());
        }
        @Override
        public void performance () {
                System . out . printf ( " 娱乐明星 %s 表演 \n" , getName ());
        }
        @Override
        public void sing () {
                System . out . printf ( " 娱乐明星 %s 唱歌 \n" , getName ());
        }
        @Override
        public String getName () {
                return name ;
        }
}
package com . we . interfaceclass . person ;
public class PersonTest {
        public static void main ( String [] args ) {
                Person p = new EntertainmentStar ( " 刘德华 " ); // 娱乐明星是人
                System . out . println ( p . getName ());
                Actor a = new EntertainmentStar ( " 范冰冰 " ); // 娱乐明星是演员
                a . performance ();
                Singer s = new EntertainmentStar ( " 张学友 " ); // 娱乐明星是歌手
                s . sing ();
                Artist artist = new EntertainmentStar ( " 古天乐 " ); // 娱乐明星是艺人
                artist . endorsement ();
                artist . performance ();
                artist . sing ();
        }
}

5. 接口应用场景

        一般来说,定义规则、定义约定时使用接口。
示例
        计算机对外暴露有 USB 接口, USB 接口生产商只需要按照接口的约定生产相应的设备 ( 比如 USB 键盘、USB 鼠标、优盘 ) 即可。

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客

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

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

相关文章

float32 float16 bfloat16 推理训练GPU速度和内存调研

概念: 参考:Accelerating Large Language Models with Mixed-Precision Techniques - Lightning AI 3种数量类型表示的数据范围不一样,以float32为例其中有1个符号位,8位表示指数,23位表示尾数 标准训练推理是用的fl…

团体程序设计天梯赛 L2-013 红色警报(连通分量)

L2-013 红色警报 分数 25 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域&#xff0c…

eclipse maven 项目导入报错

错误:Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.apt.dispatch.AnnotationDiscoveryVisitor 环境:eclipse Kepler Service Release 2 ,JDK1.7 解决办法:编码不对,修改

前端自带的base64转化方法

前端html的base64使用方法window.btoa()和window.atob()_html用window.btoa();-CSDN博客

ubuntu20.04缺少libssl.so.1.0.0的解决方法

Index of /ubuntu/pool/main/o/openssl 使用一下下载命令,注意如果提示安装包不存在,可以从上述链接中找到合适的安装包,下载安装 wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.debsu…

指令调用模板

也就是这边指令通过id和map会定位到一个结构体,然后这个结构再赋值两个成员,一个是函数一个是指令类型,然后这个函数是模板的实例化 使用的时候就传进去,这只是参数,最开始初始化的时候模板就已经实例化了。然后关于模…

为什么美国硅谷作为服务器托管的首选地?

在数字化时代,服务器托管已成为企业运营不可或缺的一部分。而美国硅谷作为全球科技创新的摇篮,其服务器托管服务备受全球企业青睐。那么,为什么众多企业选择美国硅谷作为服务器托管的首选地呢? 硅谷拥有得天独厚的地理位置和网络基础设施。硅…

[HackMyVM]Quick 2

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

若依框架的使用

文章目录 1,前端2,后端3,数据库4,测试 1,前端 2,后端 3,数据库 4,测试

Vision Transformers的注意力层概念解释和代码实现

2017年推出《Attention is All You Need》以来,transformers 已经成为自然语言处理(NLP)的最新技术。2021年,《An Image is Worth 16x16 Words》,成功地将transformers 用于计算机视觉任务。从那时起,许多基于transformers的计算机…

刘敏:楼氏动铁和麦克风助力听力健康技术发展 | 演讲嘉宾公布

一、助辅听器材Ⅱ专题论坛 助辅听器材Ⅱ专题论坛将于3月28日同期举办! 听力贯穿人的一生,听觉在生命的各个阶段都是至关重要的功能,听力问题一旦出现,会严重影响生活质量。助辅听器材能有效提高生活品质。在这里,我们将…

Redis哨兵模式(Sentinel)的搭建与配置

创建三个Redis实例所需的目录,生产环境需独立部署在不同主机上,提高稳定性。 Redis 哨兵模式(Sentinel)是一个自动监控处理 redis 间故障节点转移工作的一个redis服务端实例,它不提供数据存储服务,只进行普通 redis 节点监控管理,使用redis哨兵模式可以实现redis服务端故…

八、软考-系统架构设计师笔记-系统质量属性和架构评估

1、软件系统质量属性 软件架构的定义 软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个构件,构件的外部可见属性及构件之间的相互关系。 软件架…

STM32串口:DMA空闲中断实现接收不定长数据(基于HAL库)

STM32串口:DMA空闲中断实现接收不定长数据(基于HAL库): 第一步:设置rcc,时钟频率,下载方式 设置system core->RCC如图所示:(即High Speed Clock和Low Speed Clock都选…

ansible基础与基础命令模块

一Ansible 1. ansible 的概念 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、…

什么是RESTful API? 详解@ResponseBody @RequestBosy @PathVariable@RestController

什么是RESTful API? RESTful API 是一种遵循 REST(Representational State Transfer,表现层状态转移)架构风格的网络 API 设计。它强调资源的定位和操作,通常使用 HTTP 协议的标准方法,如 GET、POST、PUT、DELETE 等…

手机群控软件开发必备源代码分享!

随着移动互联网的飞速发展,手机群控技术在市场推广、自动化测试、应用管理等领域的应用越来越广泛,手机群控软件作为一种能够同时控制多台手机设备的工具,其开发过程中,源代码的编写显得尤为重要。 1、设备连接与识别模块 设备连…

RGMII 接口调试

目录 硬件检查 软件检查 调试步骤 硬件检查 硬件工程师检查原理图和PCB,核查RGMII线路连接是否正确,PHY的 TX连接对端 RX,PHY的RX连接对端TX,原理图上以引脚序号引脚名 引脚类型(输入还是输出)逐一核查RGMII接口各个网络&#…

java Day7 正则表达式|异常

文章目录 1、正则表达式1.1 常用1.2 字符串匹配,提取,分割 2、异常2.1 运行时异常2.2 编译时异常2.3 自定义异常2.3.1 自定义编译时异常2.3.2 自定义运行时异常 1、正则表达式 就是由一些特定的字符组成,完成一个特定的规则 可以用来校验数据…

AHU 汇编 实验二

一、实验名称:实验二 不同寻址方式的灵活运用 二、实验内容:定义数组a[6],用多种寻址方式访问对应元素,实现(a[0]a[1])*(a[2]-a[3])/a[4],将结果保存在内存a[5]中,用debug查询结果。 实验过程&a…