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…

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

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

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

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

【一】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图例组…

提取点云-------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技术和网络规划工具&#…

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…

构建Python中的分布式日志系统:ELK与Fluentd的结合

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代软件开发中&#xff0c;日志系统是至关重要的组成部分。它们不仅用于故障排查和性能监…

利用Python进行大规模数据处理

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行大规模数据处理&#xff1a;Hadoop与Spark的对比 随着数据量的不断增长&…

centos linux 7.9安装php8.2.18不支持mysqli模块,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

蓝桥杯竞赛类型:Web应用开发 全程详解

既然大家准备报名蓝桥杯&#xff0c;那么对蓝桥杯就应该有一定的了解了。没有了解也没关系&#xff0c;简单来说&#xff0c;蓝桥杯就是一个计算机竞赛&#xff0c;竞赛类型大多是使用各种语言写算法&#xff0c;当然还有本文的主体——Web应用开发。对蓝桥杯有了基本了解之后&…

Https协议如何保证安全性?

Https和Http的关系 Https是Http里的一层加密层&#xff0c;如果协议走了这一层加密层&#xff0c;那么就是https。如果没有&#xff0c;则是单纯的http。 因为没有走ssl/tls这层加密层&#xff0c;所以这是单纯的http协议&#xff0c;数据在网络中传输是明文的&#xff0c;也…

用html写一个有趣的动态背景

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>一个有趣的动态背景</title><link rel"stylesheet" href"./style.css"> </head> <body> <canvas id&…

STM32 F103 C8T6开发笔记14:与HLK-LD303-24G测距雷达通信

今日尝试配通STM32 F103 ZET6与HLK-LD303-24G测距雷达的串口通信解码 文章提供测试代码...... 目录 HLK-LD303-24G测距雷达外观&#xff1a; 线路连接准备&#xff1a; 定时器与串口配置准备&#xff1a; 定时器2的初始化&#xff1a; 串口1、2初始化&#xff1a; 串口1、2自定…

【Java开发指南 | 第十五篇】Java Character 类、String 类

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 Java Character 类转义序列 Java String 类连接字符串 Java Character 类 Character 类是 Java 中用来表示字符的包装类&#xff0c;它提供了一系列静态方法用于对字符进行操作&#xff0c;其主要分为静态方法…

AAAI-24 | EarnHFT:针对高频交易的分层强化学习(RL)框架

AAAI-24 | EarnHFT:针对高频交易的分层强化学习&#xff08;RL&#xff09;框架 原创 QuantML QuantML 2024-04-15 09:25 上海 EarnHFT 摘要(Abstract):高频交易&#xff08;HFT&#xff09;使用计算机算法在短时间内&#xff08;例如秒级&#xff09;做出交易决策&#xff…