Java接口的定义和实现

定义接口

Java 接口的定义方式与类基本相同,不过接口定义使用的关键字是 interface,接口定义的语法格式如下:

[public] interface interface_name [extends interface1_name[, interface2_name,]] {// 接口体,其中可以包含定义常量和声明方法[public] [static] [final] type constant_name = value;    // 定义常量[public] [abstract] returnType method_name(parameter_list);    // 声明方法
}

对以上语法的说明如下:

	public 表示接口的修饰符,当没有修饰符时,则使用默认的修饰符,此时该接口的访问权限仅局限于所属的包;interface_name 表示接口的名称。接口名应与类名采用相同的命名规则,即如果仅从语法角度来看,接口名只要是合法的标识符即可。如果要遵守 Java 可读性规范,则接口名应由多个有意义的单词连缀而成,每个单词首字母大写,单词与单词之间无需任何分隔符。extends 表示接口的继承关系;interface1_name 表示要继承的接口名称;constant_name 表示变量名称,一般是 static 和 final 型的;returnType 表示方法的返回值类型;parameter_list 表示参数列表,在接口中的方法是没有方法体的。

注意:一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。

接口对于其声明、变量和方法都做了许多限制,这些限制作为接口的特征归纳如下:

	具有 public 访问控制符的接口,允许任何类使用;没有指定 public 的接口,其访问将局限于所属的包。方法的声明不需要其他修饰符,在接口中声明的方法,将隐式地声明为公有的(public)和抽象的(abstract)。在 Java 接口中声明的变量其实都是常量,接口中的变量声明,将隐式地声明为 public、static 和 final,即常量,所以接口中定义的变量必须初始化。

接口没有构造方法,不能被实例化。例如:

public interface A {publicA(){}    // 编译出错,接口不允许定义构造方法
}

一个接口不能够实现另一个接口,但它可以继承多个其他接口。子接口可以对父接口的方法和常量进行重写。例如:

public interface StudentInterface extends PeopleInterface {// 接口 StudentInterface 继承 PeopleInterfaceint age = 25;    // 常量age重写父接口中的age常量void getInfo();    // 方法getInfo()重写父接口中的getInfo()方法
}

例如,定义一个接口 MyInterface,并在该接口中声明常量和方法,如下:

public interface MyInterface {    // 接口myInterfaceString name;    // 不合法,变量name必须初始化int age = 20;    // 合法,等同于 public static final int age = 20;void getInfo();    // 方法声明,等同于 public abstract void getInfo();
}

实现接口

接口的主要用途就是被实现类实现,一个类可以实现一个或多个接口,继承使用 extends 关键字,实现则使用 implements 关键字。因为一个类可以实现多个接口,这也是 Java 为单继承灵活性不足所作的补充。类实现接口的语法格式如下:

<public> class <class_name> [extends superclass_name] [implements interface1_name[, interface2_name…]] {// 主体
}

对以上语法的说明如下:

	public:类的修饰符;superclass_name:需要继承的父类名称;interface1_name:要实现的接口名称。

实现接口需要注意以下几点:

	实现接口与继承父类相似,一样可以获得所实现接口里定义的常量和方法。如果一个类需要实现多个接口,则多个接口之间以逗号分隔。一个类可以继承一个父类,并同时实现多个接口,implements 部分必须放在 extends 部分之后。一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法(也就是重写这些抽象方法);否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义成抽象类。

在程序的开发中,需要完成两个数的求和运算和比较运算功能的类非常多。那么可以定义一个接口来将类似的功能组织在一起。示例接口的实现方式。

1 . 创建一个名称为 IMath 的接口,代码如下:

public interface IMath {public int sum();    // 完成两个数的相加public int maxNum(int a,int b);    // 获取较大的数
}

2 . 定义一个 MathClass 类并实现 IMath 接口,MathClass 类实现代码如下:

public class MathClass implements IMath {private int num1;    // 第 1 个操作数private int num2;    // 第 2 个操作数public MathClass(int num1,int num2) {// 构造方法this.num1 = num1;this.num2 = num2;}// 实现接口中的求和方法public int sum() {return num1 + num2;}// 实现接口中的获取较大数的方法public int maxNum(int a,int b) {if(a >= b) {return a;} else {return b;}}
}

在实现类中,所有的方法都使用了 public 访问修饰符声明。无论何时实现一个由接口定义的方法,它都必须实现为 public,因为接口中的所有成员都显式声明为 public。

3 . 最后创建测试类 NumTest,实例化接口的实现类 MathClass,调用该类中的方法并输出结果。该类内容如下:

public class NumTest {public static void main(String[] args) {// 创建实现类的对象MathClass calc = new MathClass(100, 300);System.out.println("100 和 300 相加结果是:" + calc.sum());System.out.println("100 比较 300,哪个大:" + calc.maxNum(100, 300));}
}

程序运行结果如下所示。

100300 相加结果是:400
100 比较 300,哪个大:300

在该程序中,首先定义了一个 IMath 的接口,在该接口中只声明了两个未实现的方法,这两个方法需要在接口的实现类中实现。在实现类 MathClass 中定义了两个私有的属性,并赋予两个属性初始值,同时创建了该类的构造方法。因为该类实现了 MathClass 接口,因此必须实现接口中的方法。在最后的测试类中,需要创建实现类对象,然后通过实现类对象调用实现类中的方法。

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

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

相关文章

李沐老师的《动手学深度学习PyTorch》中的d2lzh_python包的安装

关于RNN章节 以及模型章节等会使用到d2l的python包 cmd下载地址&#xff1a;pip install d2l -i https://pypi.doubanio.com/simple/

人体轮廓_人体艺术:赏世界著名的女人体油画:身体轮廓

阅读本文前&#xff0c;请您先点击上面的“十点姐姐”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。 …

c语言未声明的标识符什么意思_C语言中%d和%f是什么意思啊?

%d表示输入或输出十进制有符号数&#xff1b;%f表示输入或输出浮点数&#xff08;float&#xff0c;四字节表示&#xff09;&#xff1b;在C语言中输出不同数据时需要用到不同的格式字符&#xff0c;%d是用来输出十进制整型数据的实际长度输出&#xff0c;%f是以小数形式输出单…

李沐老师《动手学深度学习》课程总结1

数据操作 1、 创建数组&#xff1a;形状、数据类型、数据值 2、 访问元素&#xff1a;[1, 2] 访问第二行第三列 [1, :] 访问第二行 [1:3, 1:] 子区域&#xff1a;第二行至第四行前一行到第二列之后所有 [::3, ::2] 子区域&#xff1a;每三行一跳 第零、三…行拿出; 第零、二…列…

Java中抽象类和接口的区别?

抽象类和接口的概念 抽象类 抽象类必须用 abstract 修饰&#xff0c;子类必须实现抽象类中的抽象方法&#xff0c;如果有未实现的&#xff0c;那么子类也必须用 abstract 修饰。抽象类默认的权限修饰符为 public&#xff0c;可以定义为 public 或 procted&#xff0c;如果定义…

gimp 抠图_gimp抠图教程:gimp快速实现抠图效果

摘要&#xff1a;将图像中需要的部分从画面中精确地提取出来&#xff0c;我们就称为抠图&#xff0c;抠图是后续图像处理的重要基础&#xff0c;关于gimp的快速抠图技巧你们知道吗?将图像中需要的部分从画面中精确地提取出来&#xff0c;我们就称为抠图&#xff0c;抠图是后续…

docker build -t_在Docker环境构建、打包和运行Spring Boot应用

为何考虑采用Docker&#xff1f;Docker是提供用户构建镜像的一种容器化技术&#xff0c;所构建的镜像包含了主要的应用程序和运行应用所需的所有依赖项。该镜像可在任何虚拟机或物理机器上的Docker容器上运行。它的强大之处在于允许用户在开发、测试、预生产和生产中运行同样的…

Java内部类是什么?

在类内部可定义成员变量和方法&#xff0c;且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner&#xff0c;此时类 Inner 就称为内部类&#xff08;或称为嵌套类&#xff09;&#xff0c;而类 Outer 则称为外部类&#xff08;或称为宿主类&#xff09;。 …

mysql 删除表记录的 存储过程命令_用SQL语句删除一个数据库的所有表和所有存储过程...

如果数据库里有很多表和存储过程&#xff0c;要用手动鼠标右键一个个删除是很麻烦的&#xff0c;用SQL语句来删除就方便很多了删除所有的表&#xff1a;如果由于外键约束删除table失败&#xff0c;则先删除所有约束&#xff1a;--/第1步**********删除所有表的外键约束********…

有意思的编程面试问题

第一&#xff1a;有12个外观完全一样的球&#xff1b;   第二&#xff1a;11个是好球&#xff0c;重量相同&#xff1b;   第三&#xff1a;有一个球是“坏球”&#xff0c;重量与其他11个球异常&#xff0c;但不知偏轻偏重&#xff01;   第四&#xff1a;有一架天平&am…

MOOC-人工智能实践:Tensorflow笔记4.2自制数据集txt文件和数据集不匹配解决办法(读取文件名并提取内容并合并原始内容与提取内容)

1、读取文件名称生成txt文件 # P01 批量读取文件名&#xff0c;并将读取的文件名保存到指定路径下的txt中&#xff08;带.*** 后缀&#xff09;import os def ListFilesToTxt(dir, file, wildcard, recursion):exts wildcard.split(" ")files os.listdir(dir)for …

file数组 删除文件_java编程IO基础之一:File类

在整个java.io包中&#xff0c;File类是唯一的一个与文件本身操作有关的类&#xff0c;既可以执行文件的创建、删除、重命名&#xff0c;取得文件大小和修改日期。File的构造函数&#xff1a;public File(String pathname) 给定一个要操作文件的完整路径。public File(File par…

Java实例内部类

实例内部类是指没有用 static 修饰的内部类&#xff0c;有的地方也称为非静态内部类。示例代码如下&#xff1a; public class Outer {class Inner {// 实例内部类} }上述示例中的 Inner 类就是实例内部类。实例内部类有如下特点。 1 . 在外部类的静态方法和外部类以外的其他…

mysql table fetching_MySQL死锁分析一例

Tomcat日志报死锁错误&#xff0c;show innodb status获取死锁信息&#xff1a;------------------------LATEST DETECTED DEADLOCK------------------------181107 9:30:46*** (1) TRANSACTION:TRANSACTION 2067C318, ACTIVE 16 sec fetching rowsmysql tables in use 1, lock…

excel工具箱_WPS搬来救兵智能工具箱,强大到Excel没有还手之力

EXCEL不加班眼见Excel连胜2局&#xff0c;WPS慌了&#xff0c;搬来救兵智能工具箱&#xff0c;这个神器&#xff0c;所到之处&#xff0c;问题瞬间解决。这智能工具箱究竟是何方宝物&#xff0c;强大到Excel没有还手之力&#xff01;Excel2016的闪电填充确实牛逼&#xff0c;不…

目标检测初始准备环节-安装包所需镜像源网址(以Labelimg为例)

目标检测安装labelimg对自己的数据集进行标记&#xff08;windows系统&#xff09; pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple镜像源可以替换为&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://m…

mysql cve 2016 3521_MySQL-based databases CVE -2016-6663 本地提权

date: 2016/11/3author: dlive0x01 漏洞原文翻译水平不高求轻喷感觉作者在写文章的时候有些地方描述的也不是特别清楚&#xff0c;不过结合poc可以清晰理解漏洞利用过程0x04漏洞利用过程总结给出了清晰的漏洞利用过程&#xff0c;结合poc食用效果更佳# http://legalhackers.com…

Java静态内部类

静态内部类是指使用 static 修饰的内部类。示例代码如下&#xff1a; public class Outer {static class Inner {// 静态内部类} }上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点。 1 . 在创建静态内部类的实例时&#xff0c;不需要创建外部类的实例。 public …

oracle em界面监控出来的奇怪图像_海康poe主机断电重启后不出图像,显示用户被锁定...

海康poe主机断电重启后不出图像,显示用户被锁定前段时间给客户装了一套海康poe主机的监控系统&#xff0c;摄像头也是海康的130万的poe摄像头&#xff0c;客户突然打电话来说&#xff0c;断电重启后监控图像不出来了&#xff0c;我很奇怪&#xff0c;海康的监控系统也做过很多&…

论文图标visio等字体对应

八号&#xff1d;5磅(5pt) (5/72)*966.67 6px 七号&#xff1d;5.5磅 (5.5/72)*967.3 7px 小六&#xff1d;6.5磅 (6.5/72)*968.67 8px 六号&#xff1d;7.5磅 (7.5/72)*9610px 小五&#xff1d;9磅 (9/72)*9612px 号&#xff1d;10.5磅 (10.5/72)*9614px 小四&#xff1d;12磅…