接口详细说明

news2024/9/22 1:32:35

接口概述

接口也是一种规范

接口的定义与特点

接口的格式如下:

//接口用关键字interface来定义
public interface 接口名 {
       // 常量
       // 抽象方法
} 

JDK8之前接口中只能是抽象方法和常量,没有其他成分了。

接口不能实例化。

接口中的成员都是public修饰的,写不写都是,因为规范的目的是为了公开化。 

示例: 

public interface SportManInterface {
    // 接口中的成员:JDK 1.8之前只有常量 和 抽象方法
    // public static final 可以省略不写,接口默认会为你加上!
    // public static final String SCHOOL_NAME = "黑马";
    String SCHOOL_NAME = "黑马";

    // 2、抽象方法
    //  public abstract 可以省略不写,接口默认会为你加上!
    // public abstract void run();
    void run();

    // public abstract void eat();
    void eat();
}

接口的基本使用:被实现

接口是用来被类实现(implements)的,实现接口的类称为实现类。

实现类可以理解成所谓的子类。

修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {
}
//实现的关键字:implements

从上面可以看出,接口可以被类单实现,也可以被类多实现。

示例:

/**
   实现类(子类)
 */
public class PingPongMan implements SportMan , Law{
    private String name;
    public PingPongMan(String name) {
        this.name = name;
    }

    @Override
    public void rule() {
        System.out.println(name + "要遵章守法,不能随意外出,酗酒,约会~~~");
    }

    @Override
    public void run() {
        System.out.println(name + "必须要跑步训练~~");
    }

    @Override
    public void competition() {
        System.out.println(name + "需要参加国际比赛~~");
    }
}

接口实现的注意事项: 一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。

接口与接口的关系:多继承

基本小结

类和类的关系:单继承。

类和接口的关系:多实现。

接口和接口的关系:多继承,一个接口可以同时继承多个接口。

接口多继承的作用

规范合并,整合多个接口为同一个接口,便于子类实现。

JDK8开始接口新增方法

JDK8版本开始后,Java只对接口的成员方法进行了新增。

原因如下:

项目Version2.0需要对Inter接口丰富,加入10个新的抽象方法,此时改了接口就要所有实现类实现这些方法。

如何能在丰富接口功能的同时 又不对子类代码进行更改呢?

允许接口中直接定义带有方法体的方法,那么子类就无需实现新的方法。 

第一种:默认方法

类似之前写的普通实例方法:必须用default修饰 默认会public修饰。需要用接口的实现类的对象来调用。

default void run(){
    System.out.println("--开始跑--");
}

第二种:静态方法

默认会public修饰,必须static修饰。

注意:接口的静态方法必须用本身的接口名来调用。

static void inAddr(){
   System.out.println("我们都在黑马培训中心快乐的学习Java!");
}

第三种:私有方法

就是私有的实例方法:,必须使用private修饰,从JDK 1.9才开始有的。

只能在本类中被其他的默认方法或者私有方法访问。

private void go(){
    System.out.println("--准备--");
}

总结

JDK8开始后新增了那些方法?

默认方法:default修饰,实现类对象调用。

静态方法:static修饰,必须用当前接口名调用

私有方法:private修饰,jdk9开始才有的,只能在接口内部被调用。

他们都会默认被public修饰。 

注意:JDK8新增的3种方法我们自己在开发中很少使用,通常是Java源码涉及到的,我们需要理解、识别语法、明白调用关系即可。

使用接口的注意事项

1、接口不能创建对象

2、一个类实现多个接口,多个接口中有同样的静态方法不冲突。

3、一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。

4、一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。 5、一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

下面的代码就存在规范冲突,两个run的返回值不一样。

//interface AAA{
//    int run();
//}
//interface BBB{
//    void run();
//}
//
//interface CCC extends AAA, BBB{
//}

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

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

相关文章

[Redis]——初识Redis

一、Redis为非关系型数据库 ❓我们常见的MySQL、SQLServer都是关系型数据库,那他们之间有什么区别与联系呢? 📕关系型数据库与非关系型数据库的区别(面试题) 解释: SQL数据库中的表是有结构的,包…

DataIntegrityViolationException异常产生原因及解决方案

DataIntegrityViolationException异常产生原因及解决方案 01 异常的发生场景 在我新写了一个接口之后出现的 //org.springframework.dao.DataIntegrityViolationException日志报错的意思是参数设置了一个错误的值 02 异常的产生及其原因 我最开始认为是MySQL数据库表设计…

ShardingJdbc实战-分库分表

文章目录 基本配置分库分表的分片策略一、inline 行表达时分片策略algorithm-expression行表达式完整案例和配置如下 二、根据实时间日期 - 按照标准规则分库分表标准分片 - Standard完整案例和配置如下 基本配置 逻辑表 逻辑表是指:水平拆分的数据库或者数据表的相…

应用层http协议包解析与https加密策略解析

文章目录 一.应用层协议--http协议基础认知二.https协议加密策略解析加密策略1--通信双方只使用对称加密加密策略2--通信双方使用单方非对称加密加密策略3--通信双方都使用非对称加密加密策略4--非对称加密与对称加密配合使用中间人攻击数据签名与CA证书HTTPS数据安全认证的本质…

Java基于SpringBoot网上超市的设计与实现论文

摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此超市商品销售信…

外贸业务员没客户的7大原因+解决办法!

业务员没有客户,就是无源之水,无本之木,这自然也就没有业绩。那些吃空饷的业务员,迟早会拖垮公司。所以不管是什么原因导致的业务员没客户,都要一一查验清楚。七个业务员没有客户的原因,七种对策&#xff0…

小朋友来自多少小区 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 幼儿园组织活动,老师布置了一个任务: 每个小朋友去了解与自己同一个小区的小朋友还有几个。 我们将这些数量汇总到数组 garden 中。 请…

IEEE754标准的c语言阐述,以及几个浮点数常量

很多年前,调研过浮点数与整数之间的双射问题: win7 intel x64 cpu vs2013 c语言浮点数精度失真问题 最近重新学习了一下IEEE754标准,也许实际还有很多深刻问题没有被揭示。 计算机程序设计艺术,据说这本书中也有讨论。 参考&…

uni-app去除页面头部的标题栏

uniapp项目 每个界面都会有一个标题栏 配置在我们项目根目录的 pages.json中 我们将它全部去掉 上面还是有一条黑的 体验非常差 我们只需要在pages.json中 指定page的 style中加入 "navigationStyle": "custom"对应的page 就没有这个标题栏了

Spring 源码解析

文章目录 前言相关Spring的定义接口整体代码StartupStep contextRefresh this.applicationStartup.start("spring.context.refresh")prepareRefresh()obtainFreshBeanFactory()registerBeanPostProcessors(beanFactory)SpringAOP原码流程EnableAspectJAutoProxyAnno…

协方差矩阵计算

文章目录 协方差矩阵计算原理python实现 协方差矩阵 协方差矩阵反映了两个随机变量变化时是同向还是反向的&#xff08;相关性&#xff09;。 如果协方差>0&#xff0c;则说明这两个随机变量同向变化。 协方差矩阵<0&#xff0c;则说明是反向变化。 协方差矩阵0&#xf…

【MySQL】查询语句:条件、排序和分页

基本查询 MySQL 数据库使用SELECT语句来查询数据。 查询字段 以下为在MySQL数据库中查询数据通用的 SELECT 语法&#xff1a; SELECT 字段名,字段名... FROM 表名;选择全部列 SELECT * FROM emp; -- 查询所有字段一般情况下&#xff0c;除非需要使用表中所有的字段数据&…

React入门之React_使用es5和es6语法渲染和添加class

React入门 //react的核心库 <script src"https://cdn.jsdelivr.net/npm/react17/umd/react.development.js"></script> //react操作dom的核心库&#xff0c;类似于jquery <script src"https://cdn.jsdelivr.net/npm/react-dom17/umd/react-dom.…

【知识分享】配电网重构知识及matlab实现

目录 一、理论分析 二、程序介绍 1.基本环矩阵M的matlab代码 2.智能算法重构代码 三、下载链接 配网重构中&#xff0c;很重要的一个约束条件为配网应随时保持开环、辐射的状态&#xff1a; 配电网系统是属于闭环设计但是开环运行的系统&#xff0c;因此&#xff0c;在开关…

考取ORACLE数据库OCP的必要性 Oracle数据库

OCP证书是什么&#xff1f; OCP&#xff0c;全称Oracle Certified Professional&#xff0c;是Oracle公司的Oracle数据库DBA&#xff08;Database Administrator&#xff0c;数据库管理员)认证课程。这是Oracle公司针对数据库管理领域设立的一项认证课程&#xff0c;旨在评估和…

Java ZooKeeper-RocketMQ 面试题

Java ZooKeeper-RocketMQ 面试题 前言1、谈谈你对ZooKeeper的理解 &#xff1f;2、Zookeeper的工作原理&#xff08;Zab协议&#xff09;3、谈谈你对分布式锁的理解&#xff0c;以及分布式锁的实现&#xff1f;4、 zookeeper 是如何保证事务的顺序一致性的&#xff1f;5、 zook…

Unity 向量计算、欧拉角与四元数转换、输出文本、告警、错误、修改时间、定时器、路径、

using System.Collections; using System.Collections.Generic; using UnityEngine;public class c2 : MonoBehaviour {// 定时器float t1 0;void Start(){// 向量Vector3 v1 new Vector3(0, 0, 2);Vector3 v2 new Vector3(0, 0, 3);// 计算两个向量的夹角Debug.Log(Vector3…

Netty的InboundHandler 和OutboundHandler

一、InboundHandler 和OutboundHandler的区别 在Netty中&#xff0c;"inbound"表示来自外部来源&#xff08;如网络连接&#xff09;的数据&#xff0c;而"outbound"则表示从应用程序发送到外部目标&#xff08;如网络连接或其他服务&#xff09;的数据。…

如何使用 CrewAI 构建协作型 AI Agents

一、前言 AI Agents 的开发是当前软件创新领域的热点。随着大语言模型 (LLM) 的不断进步&#xff0c;预计 AI 智能体与现有软件系统的融合将出现爆发式增长。借助 AI 智能体&#xff0c;我们可以通过一些简单的语音或手势命令&#xff0c;就能完成以往需要手动操作应用程序才能…

QT绘图

QPainter paintEvent是Qt中一个非常重要的函数&#xff0c;它是QWidget类的一个事件处理函数&#xff0c;用于处理小部件的绘制事件。当Qt认为小部件需要重绘时&#xff08;例如&#xff0c;窗口首次出现时&#xff0c;大小改变时&#xff0c;或者调用了小部件的update()方法时…