【java基础】接口(interface)

news2024/9/28 20:41:58

文章目录

  • 基础介绍
  • 接口的定义
  • 关于接口字段和方法的说明
  • 使用接口
  • 抽象类和接口
  • 接口方法冲突的一些说明
    • 方法相同名称和参数,返回值相同
    • 方法名称相同,参数不同,返回值相同
    • 方法返回值不同,名称参数相同
    • 方法完全相同,一个有默认实现
    • 接口和类中方法冲突
  • 总结

基础介绍

接口用来描述类应该做什么,而不是指定它们具体应该怎么做。
在java中,接口不是类,而是对希望符合这个接口的类的一组需求。java只能继承一个类,但是可以实现多个接口。

接口的定义

接口的定义如下

interface sports {

}

接口定义其实就是和类定义相似的。只不过把class换成了interface

我们在interface可以定义方法,就像抽象类那样定义未实现的方法即可。类实现接口时就必须重写方法或者自己成为抽象类

interface Sports {

    void run();
}

在接口里面可以定义方法的默认实现,使用default关键字,如果类实现接口时没有重写该方法,那么该方法就会使用默认实现

interface Sports {

    void run();
    
    default void jump(){
        
    }
}

现在,我们可以暂时将接口看做为没有实例字段的抽象类。

关于接口字段和方法的说明

在接口中,我们不能定义实例字段,但是可以定义静态字段。

interface A {
    public static final int a = 1;
}

但是上面这样写IDEA会有提示

在这里插入图片描述

表示字段冗余,其实,在接口中我们定义的字段只能使用public static final进行修饰

我们在接口中可以定义静态方法

interface A {
    public static void t() {

    }
}

对于接口里面的内容,其实我们public修饰符可以不用写,因为接口里面字段和方法的访问修饰符只能是public

使用接口

我们先定义一个接口,内容如下

interface Sports {
    void run();
}

我们创建一个类来实现接口

class Cat implements Sports {

    @Override
    public void run() {
        System.out.println("cat--run");
    }
}

这个其实和继承基本类似的,只是将关键字从extends换成了implements

关于接口,我们不能够使用new来实例化一个接口

       Sports sports = new Sports(); // ERROR

但是可以声明接口变量,然后引用实现了这个接口的类对象即可

        Sports cat = new Cat(); // OK

对于接口,我们将其看作实现接口类的父类就很好理解了

抽象类和接口

对于一个类,我们只能继承一个类,但是可以实现多个接口。我们就可以将接口看做没有实例字段,并且可以被多继承的抽象类

interface A {

}

interface B {

}

class C implements A, B {
    
}

接口方法冲突的一些说明

方法相同名称和参数,返回值相同

我们知道,一个类可以实现多个接口,如果接口有相同的方法名称和参数会怎么样呢?如果有相同的名称和参数,并且返回值相同,那么我们只需要实现一个t方法即可

interface A {
    void t1();
}

interface B {
    void t1();
}

class C implements A, B {

    @Override
    public void t1() {

    }
}

方法名称相同,参数不同,返回值相同

如果方法只有参数不同,那么我们需要实现2个方法,也就是会进行重载

interface A {
    void t1();
}

interface B {
    void t1(int a);
}

class C implements A, B {
    @Override
    public void t1() {
    }

    @Override
    public void t1(int a) {
    }
}

方法返回值不同,名称参数相同

如果方法名称相同,参数相同,而返回值不同,那么就会报错,我们无法同时实现2个名称相同,参数也相同但是返回值不同的方法。

interface A {
    int t1();
}

interface B {
    void t1();
}

一个类无法同时实现A接口和B接口

方法完全相同,一个有默认实现

如果2个接口一个有默认实现,一个没有默认实现,对于这种情况,我们也必须实现该方法

interface A {
    default void t1() {
    }
}

interface B {
    void t1();
}

class C implements A, B {

    @Override
    public void t1() {
        A.super.t1();
    }
}

但是我们可以通过 接口名.super.方法名调用默认实现的方法

接口和类中方法冲突

对于接口和类冲突的,都以类为准,也就是类优先原则,不管接口是否有默认实现都会被超类中的方法覆盖

interface A {
    default void t1() {
        System.out.println("interface");
    }
}

interface B {
    void t1();
}

class C {
    public void t1() {
        System.out.println("class");
    }
}

class D extends C implements A, B {

}

我们使用D来调用t1方法将会输出class

        D d = new D();
        d.t1();  // 输出class

总结

对于接口,我们将其看作可以被多继承的,并且不能有实例字段的抽象类就行了。对于接口和接口发生冲突时,只要返回类型相同我们就可以处理,如果返回类型不同那就不能同时实现有冲突的接口了。如果接口和超类发生冲突,那么就是以类优先原则来进行解决的。

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

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

相关文章

中文预训练大模型—文心Ernie技术原理

文心Ernie技术原理 一、背景技术 Ernie是基于Bert模型进行改进,基本模型是Transformer,Bert完成的预训练任务是:完形填空(通过基本语言单元掩码);上下句预测。 Bert模型的缺陷是:只能捕获局部…

关于Charles抓包

目录 抓包的原理 抓包的步骤 1. 下载Charles 2. PC抓HTTPS协议的包 3. 移动端抓包步骤 证书的原理 抓包的原理 抓包的软件非常多,其实底层逻辑充当了一个中间人代理的角色来对HTTPS进行抓包,结合日常自己用的Charles做一个记录。首先先了解抓包的原…

RT-Thread内核学习笔记

文章目录RT-Thread一、线程1. 线程定义2. 线程栈3. 线程函数 rt_thread_entry()4. 线程控制块 struct rt_thread5. 线程初始化 rt_thread_init()6. 就绪列表7. 调度器二、对象容器1. 对象:所有的数据结构都是对象2. 容器:每当创建一个对象,就…

腾讯云GPU游戏服务器/云主机租用配置价格表出炉!

用于游戏业务的服务器和普通云服务器和主机空间是不同的,游戏服务器对于硬件的配置、网络带宽有更大的要求,一般游戏服务器根据不同的配置和适用场景会有十几元一小时到几十元一小时,而且可以根据不同的按量计费。而普通的云服务器可能需要几…

【技术分享】配置802.1x 本地认证

实验需求 PC1(10.10.10.2/30)直接连接到RouterA的Eth2/0/1端口,RouterA的VLANIF10接口IP地址10.10.10.1/30(为PC1上的网关IP地址),配置802.1x协议进行访问控制,认证方式采用本地认证。 实验步骤 RouterA的配置 V200R00…

Impala 在网易大数据的优化和实践

导读: 网易大数据平台的底层数据查询引擎,选用了 Impala 作为 OLAP 查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天将为大家分享下 Impala 在网易大数据的优化和实践。 01 Im…

qnx的spi记录

https://www.cnblogs.com/schips/p/protocol_spi_about.html (主要)https://www.zhihu.com/question/308406342/answer/2901148391https://www.bbsmax.com/A/lk5aa4Pm51/ (有基础测试代码)https://baijiahao.baidu.com/s?id17460…

聚焦技术前沿 引领行业未来 | 第四届OpenI/O 启智开发者大会深度学习与大模型产业应用专场论坛顺利举办!

为探索人工智能的重要发展方向,深入了解大模型、深度学习领域,推动人工智能的快速发展,2月24日,第四届启智开发者大会以“引领前沿技术,推动产业升级”为主题的“深度学习与大模型产业应用专场”在深圳人才研修院智汇中…

数学知识(算法模板)

数学知识 文章目录数学知识一、质数一、试除法判定质数二、试除法分解质因数三、朴素筛法求素数四、线性筛法求素数二、约数一、试除法求所有约数二、约数个数约数之和三、欧几里得算法三、欧拉函数一、欧拉函数的定义二、筛法求欧拉函数四、快速幂一、快速幂二、快速幂求逆元扩…

Vue中rules表单验证,表单必填*显示位置不对,*显示位置错误

<el-form :model"ruleForm" :rules"rules" ref"ruleForm"><el-form-item label"名称" prop"name"><el-input v-model"ruleForm.name"></el-input></el-form-item> </el-form>…

.NET 使用NLog增强日志输出

引言 不管你是开发单体应用还是微服务应用&#xff0c;在实际的软件的开发、测试和运行阶段&#xff0c;开发者都需要借助日志来定位问题。因此一款好的日志组件将至关重要&#xff0c;在.NET 的开源生态中&#xff0c;目前主要有Serilog、Log4Net和NLog三款优秀的日志组件&…

少儿编程 电子学会图形化编程等级考试Scratch一级真题解析(判断题)2022年12月

2022年12月scratch编程等级考试一级真题 判断题(共10题,每题2分,共20分) 26、可以通过四种方式添加新角色(不包括复制已有角色):选择一个角色、绘制、随机、上传角色 答案:对 考点分析:考查角色添加的方式,角色添加四种方式分别为题目给出的四种,所以正确 27、角…

分布式事务总结

1. 分布式事务产生的背景 1.1 数据库水平拆分 对于大部分的业务而言&#xff0c;在起步阶段&#xff0c;为了快速上线&#xff0c;一般都是单库单表的。但是随着业务的扩张&#xff0c;数据量也随着扩增&#xff0c;单库的性能逐渐变差&#xff0c;就会有数据库的单点压力。因…

大数据常见术语

大数据常见术语一览 主要内容包含以下&#xff08;收藏&#xff0c;转发给你身边的朋友&#xff09; 雪花模型、星型模型和星座模型 事实表 维度表 上钻与下钻 维度退化 数据湖 UV与PV 画像 ETL 机器学习 大数据杀熟 SKU与SPU 即席查询 数据湖 数据中台 ODS&#xff0c;DWD&…

过滤器的创建和执行顺序

过滤器的创建和执行顺序 8.1.1创建并配置过滤器 P143 重点是如何创建并配置&#xff08;xml&#xff09; 1.创建 public class EncodingFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFil…

Linux进程间通信:信号量(一)

前提知识 在介绍信号量之前&#xff0c;先来看看一些概念和一些简单的前提知识&#xff1a; 进程间通信的前提是让不同的进程看到同一份资源。于是&#xff0c;就有提出让这种资源成为一种公共资源的方法&#xff0c;方法的提出&#xff0c;导致了一种新的问题的出现&#xf…

MyBatis源码分析(二)SqlSessionFactory的构建及配置文件读取过程

文章目录一、MyBatis配置文件二、SqlSessionFactory的获取1、初始化XML配置的Document以及其他对象2、解析配置文件&#xff08;1&#xff09;配置Environment&#xff08;2&#xff09;存放Mapper&#xff08;3&#xff09;解析Mapper3、构造SqlSessionFactory4、总结未完待续…

测试2年,当初一起入行的朋友很多月薪20k了,自己却还没过万,到底差在了哪里?

说来奇怪&#xff0c;不管是读书还是工作&#xff0c;都存在一个现象&#xff0c;那就是人比人&#xff0c;比死人。读书的时候&#xff0c;不管是老师还是家长口中&#xff0c;总会有一个“别人家的孩子”。同样&#xff0c;到工作中&#xff0c;领导口中总会有一个“别人的员…

Doxygen 详细使用

doxygen的安装和基本使用可参考&#xff1a;Doxygen的安装和基本使用常用选项doxygen的所有选项的参考文档&#xff1a;doxygen官网文档2、样式说明doxygen可以自己自定义样式。手写 .css文件 &#xff08;可以查看doxygen的源码&#xff0c;进行相对应修改&#xff09;在Exper…

推荐一个.Net Core开发的蜘蛛爬虫开源项目

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 如果我们需要抓取网络上的数据&#xff0c;这时候我们就要写爬虫&#xff0c;这里面就涉及到网页的抓取、以及网页分析与数据提取、抓取的性能等知识&#xff0c;今天就给大家推荐一个开源项目&#xff0c;它可以…