java:Java中的接口

什么是接口

概念:

    官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

   我的解释:接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。(理解为一种特殊的类,里面全部是由全局常量公共的抽象方法所组成的)。接口是解决Java无法使用多继承的一种手段,但是接口在实际中的更多的作用是指定标准的。或者我们可以直接把接口理解为100%的抽象类,即接口中的方法必须全部是抽象方法。

 接口和类的区别:

接口(Interface)和类(Class)是 Java 中两种不同的概念,它们有一些重要的区别,主要包括以下几点:

定义:

  • 类是一种具体的实体,可以包含属性(字段)和方法的实现。
  • 接口是一种抽象的定义,只包含方法的声明而没有方法的实现

继承:

  • 类可以使用继承来扩展另一个类的属性和方法。
  • 接口可以通过实现(implements)来定义类的行为,一个类可以实现多个接口

多态性:

  • 类之间的多态性主要通过继承和方法重写来实现。
  • 接口之间的多态性主要通过接口的实现来实现,一个类可以实现多个接口,从而具有多个不同的行为

实例化:

  • 类可以被实例化为对象,对象可以调用类中定义的属性和方法。
  • 接口本身不能被实例化,但是可以通过实现接口的类来创建对象,并调用接口中定义的方法。

抽象性:

  • 类可以是抽象类(abstract class),包含抽象方法和普通方法。
  • 接口本身就是抽象的,所有方法都是抽象方法,不包含方法的具体实现。

多继承:

  • 类在 Java 中不支持多继承,即一个类只能继承一个父类
  • 接口支持多继承,一个类可以实现多个接口,从而获得多个接口的行为。

 接口的定义

在 Java 中,定义一个接口需要遵循以下步骤:

  1. 使用 interface 关键字声明接口,接口的命名通常使用首字母大写的驼峰命名规则。
  2. 在接口中定义需要暴露给外部的方法,方法声明只包含方法的签名,不包含方法体。方法可以包含参数和返回类型。
  3. 接口中的方法默认是公共的(public),可以省略 public 关键字。
  4. 接口中可以定义常量,常量默认是静态的和最终的(static final),可以省略这两个修饰符。
  5. 接口中的方法可以包含默认实现,使用 default 关键字进行声明。

   下面是一个简单的接口定义示例:

public interface Animal {// 定义一个抽象方法void eat(String food);// 定义一个默认方法default void sleep() {System.out.println("Animal is sleeping");}// 定义一个常量int LEGS = 4;
}

        在上面的示例中,定义了一个名为 Animal 的接口,包含了一个抽象方法 eat、一个默认方法 sleep 和一个常量 LEGS。接口中的方法和常量都是公共的,并且不需要使用 public 关键字进行修饰。


接口的特点

1.接口成员变量的特点:

接口中没有成员变量,只有公有静态常量。

即默认情况下属性前都会有public static final 这三个关键字修饰。如下:

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

初始化

final修饰的属性必须初始化,我们在接口中定义公有的静态常量时,必须在定义时就赋初值。(否则idea报错)。

演示:

正确的:

错误的:

 2.接口成员方法的特点:

     @.1在JDK7.0版本及之前版本中,接口中仅支持共有的抽象方法:

         public abstract 返回值类型 方法名();

     事实上,接口中的方法默认就是公有抽象方法,因此在接口中定义抽象方法时,可以省略掉abstract关键字

     @.2从JDK8.0开始,接口中可以由默认方法静态方法两种:
              默认方法——public default 返回值类型 方法名(){  }

              静态方法——public  static   返回值类型 方法名(){  }

         需要注意的是,想定义默认方法必须在前面添加default关键字,因为接口中的方法如果你什么都不写,默认是公有的抽象的方法。默认方法可以有方法体,且不需要实现类去实现,其实就是我们平时见到的普通的成员方法。但是默认方法是可以被实现类重写的。default关键字只能在接口中使用,就算实现类要重写默认方法,实现类中重写后的方法也不能添加default修饰符,不然IDEA报错。

      @.3JDK9.0以后,接口中可以有私有方法

              private  返回值类型  方法名(){  }

演示:

package Test1;// 定义一个接口
interface Animal {void eat(); // 接口中的方法默认是public abstract的void sleep();
}// 实现接口的类
class Dog implements Animal {@Overridepublic void eat() {System.out.println("Dog is eating");}@Overridepublic void sleep() {System.out.println("Dog is sleeping");}
}// 测试类
public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.eat(); // 调用接口中的eat方法dog.sleep(); // 调用接口中的sleep方法}
}

运行结果:

  注意:如果想使用默认方法,一定不要忘记添加default关键字。 


3.接口构造方法的特点:

         接口的存在的目的是为了规范类,因此,接口也不可以被实例化。接口中不允许存在代码块,也没有需要初始化的成员,因此接口没有构造方法(构造器)。在接口中定义构造器IDEA会直接报错,如下图:


4.接口创建对象的特点:

     可以通过接口类型来引用实现接口的类的对象,从而实现多态性和灵活性。 

例如:

// 定义一个接口
interface Shape {double calculateArea(); // 计算面积的抽象方法double calculatePerimeter(); // 计算周长的抽象方法
}// 实现接口的类:圆形
class Circle implements Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double calculateArea() {return Math.PI * radius * radius;}@Overridepublic double calculatePerimeter() {return 2 * Math.PI * radius;}
}// 实现接口的类:矩形
class Rectangle implements Shape {private double length;private double width;public Rectangle(double length, double width) {this.length = length;this.width = width;}@Overridepublic double calculateArea() {return length * width;}@Overridepublic double calculatePerimeter() {return 2 * (length + width);}
}// 测试类
public class Main {public static void main(String[] args) {Shape circle = new Circle(5);System.out.println("Circle Area: " + circle.calculateArea());System.out.println("Circle Perimeter: " + circle.calculatePerimeter());Shape rectangle = new Rectangle(4, 6);System.out.println("Rectangle Area: " + rectangle.calculateArea());System.out.println("Rectangle Perimeter: " + rectangle.calculatePerimeter());}
}

运行结果:


 5.接口继承关系的特点:

 类和接口之间的关系 : 

  • 类与接口是实现关系,支持“多实现”,即一个类可实现多个接口。

  接口与接口之间的关系 : 

  • 接口与接口是继承关系,java 支持接口的多继承,即一个接口可以同时继承多个接口,           格式如下 : 
  •    接口 extends 接口1,接口2,接口3...

  继承和实现的区别 : 

  •         继承体现的是“is a”的关系,父类中定义共性内容。
  •         实现体现的是“like a”的关系,父接口中定义扩展内容。

        PS : 接口的“实现”可以看作是Java中对“单继承机制”的一个补充完善。接口可以在一定程度上实现代码解耦(接口规范性 + 动态绑定)。总的来看,接口的实现比类的继承更为灵活


总结

  1. 接口定义了一组抽象方法的规范,实现接口的类必须提供这些方法的具体实现。
  2. 接口中的方法默认是public和abstract的,可以省略这些修饰符。
  3. 接口可以包含常量,这些常量默认是public、static和final的。
  4. 类可以实现一个或多个接口,使用关键字implements。
  5. 一个类可以同时继承一个类(单继承)并实现多个接口(多实现)。
  6. 接口之间可以进行继承,一个接口可以继承另一个接口,使用关键字extends。
  7. 接口不能被实例化,但可以通过实现接口的类来创建对象。
  8. 接口提供了一种规范化的方式来实现多态性,可以通过接口类型引用实现接口的类的对象。

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

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

相关文章

Java Maven项目推送到 Maven 中央仓库

准备阶段 namespace 域名认证 当需要在 sonatype 认证 com.xxx命名空间时,需要将 .xxx.com 配置域名解析。 记录类型:TXT 文本内容:验证的 key。 GPG 公私钥生成 GPG 下载地址:https://www.gnupg.org/download/index.html M…

零代码编程:用kimichat将mp4视频批量转为mp3音频

一个文件夹里面有多个子文件夹,里面的视频需要转成为mp3音频格式。可以在kimichat中键入提示词: 你是一个Python编程专家,要完成一个Python脚本的编写任务,具体步骤如下: 打开文件夹:D:\CHATGPT For TikT…

openAI介绍及相关概念

OpenAI 简介 成立背景: OpenAI 成立于 2015 年,由一群高科技界的重要人物创立,包括 Elon Musk 和 Sam Altman。其目标是推动人工智能(AI)的发展,同时确保 AI 的发展能够造福全人类。 研究方向: OpenAI 专注于深度学习…

新手必犯的十大错误 Python语言

Python 是一种广泛使用的编程语言,它以其简洁和易读性而闻名。然而,即使是经验丰富的程序员也可能会遇到一些常见的错误。以下是一些常见的 Python 错误案例: 语法错误(SyntaxError): print("Hello Wo…

SpringBoot中异步执行事务REQUIRED和REQUIRED_NEW的区别

springboot中事务的使用方式 在spring的bean中,要开启数据库事务只需要在方法中标注注解 Transactional 注解常用的参数有 Class[] rollbackFor() default {} 指定回滚异常Propagation propagation() default Propagation.REQUIRED 事务的传播机制Isolation iso…

Hive:GROUP BY GROUPING SETS

分组聚合 group by x1, x2, x3 grouping sets((x1), (x1, x2), (x1, x3),(x1, x2, x3)) 将不同维度的GROUP BY结果进行UNION ALL操作 GROUPING SETS会把在单个GROUP BY逻辑中没有参与GROUP BY的那一列置为NULL值,这样聚合出来的结果,未被GROUP BY的列…

web server apache tomcat11-10-Class Loader

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.04.10-2024.04.15

文章目录~ 1.Photo-Realistic Image Restoration in the Wild with Controlled Vision-Language Models2.Do LLMs Understand Visual Anomalies? Uncovering LLM Capabilities in Zero-shot Anomaly Detection3.UNIAA: A Unified Multi-modal Image Aesthetic Assessment Base…

大华相机C#学习之Enumerator类

构造函数 Enumerator() 创建一个Enumerator实例。 常用方法 EnumerateDevices() 枚举所有发现设备,返回List<IDeviceInfo>对象。 List<IDeviceInfo> devices new List<IDeviceInfo>();private void test_Click(object sender, EventArgs e) {devicesEnum…

【Spring进阶】基于注解的面向切面编程(AOP)详解

hi&#xff0c;我是程序员王也&#xff0c;一个资深Java开发工程师&#xff0c;平时十分热衷于技术副业变现和各种搞钱项目的程序员~&#xff0c;如果你也是&#xff0c;可以一起交流交流。 今天我们聊一聊Spring中的AOP~ AOP的核心概念 面向切面编程&#xff08;AOP&#xff…

如何实现redis的高可用?

1.主从模式&#xff1a;就是一个住节点&#xff0c;多个从节点&#xff0c;但是弊端是一个主节点崩了&#xff0c;需要手动的切换从节点&#xff0c;这个挺麻烦的 2.哨兵模式&#xff1a;就是为了解决主从模式的弊端从而在主从模式的基础上加了哨兵&#xff0c;从而可以实现自动…

【一】ECharts----【基本概念、基本实例】

目录 零.前言 一.ECharts的安装 1.1独立版本的安装 1.2CDN的安装 1.3NPM的安装 二.ECharts实例 三.系列(series) 四.创建一个ECharts图表的基本步骤 4.1创建一个DOM容器 4.2使用DOM节点初始化ECharts对象 4.3设置配置信息 4.3.1图表标题 4.3.2提示信息 4.3.3图例组…

90天玩转Python—18—Python面向对象编程:核心概念详解

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

提取点云-------PCL

提取点云 /// <summary> /// VoxelGrid滤波下采样 /// </summary> /// <param name"cloud">需要滤波的点云</param> /// <param name"lx">三维体素栅格的x</param> /// <param name"ly">三维体素栅格…

全新Linux教程-驱动大全-PCI和PCIe子系统-P2-PCI设备的访问方法-非桥设备

主要讲PCI设备的硬件访问方法。 1、PCI的硬件结构 CPU发出的地址是CPU地址&#xff0c;可能是访问底下任何一个设备。地址范围不一样&#xff0c;访问到的外设就不一样。在嵌入式中&#xff0c;通常将4G内存地址空间分成好几个区域&#xff0c;不同的访问分给不同的地址。桥内…

Github首页美化(updating)

Github首页美化 一、新建仓库二、美化Github首页主页访问量统计仓库状态统计常用语言占比统计社交链接 界面展示 一、新建仓库 对Github首页进行美化&#xff0c;需要新建一个仓库名和自己 Github 用户名相同的仓库&#xff1b;并且需要添加一个 README.md自述文件即可。 如果…

nVisual在线网络规划设计软件

●01● nVisual在线网络规划设计软件 在信息化快速发展的今天&#xff0c;网络基础设施的建设与优化变得尤为关键。为了满足现代通信行业对高效、精准的网络规划需求&#xff0c;nVisual在线网络规划设计软件应运而生&#xff0c;它通过集成先进的GIS技术和网络规划工具&#…

Ansible相关

Ansible 环境准备 主机名ip分组crontol192.168.88.1node1192.168.88.11testnode2192.168.88.12proxynode3192.168.88.13webserversnode4192.168.88.14webserversnode5192.168.88.15database 所有操作只需在crontol上操作即可 安装ansible # 依赖一般也会跟着一起装好 yum …

sprinboot+vue集成neo4j图数据库

一 、java后台 1.1 package com.admin.domain;/*** 功能描述&#xff1a;** author wangwei* date 2024-01-15 22:13*/ public class ConnectWeb {private String connectWebId;private String connectWebName;private String connectWebInfo;private String personWebIdAlph…

Vue.js------Vue组件基础

能够理解Vue组件概念和作用能够掌握封装创建组件能力能够使用组件之间通信能够完成todo案例 一.Vue组件创建和使用 1.折叠面板-实现多个 创建一个文件夹demo 具体步骤请参考vue.js---vue基础 ⚫ 解决方案: 采用vue提供的单.vue文件-组件方式来封装一套然后复用 在component…