接口interface--java学习笔记

news2025/2/24 23:03:57

认识接口

  • java提供了一个关键字interface,用这个关键字可以定义出一个特殊的结构:接口
  • 在接口里面定义的变量,不管加不加public static final修饰都默认为常量,必须赋初值
  • 在接口里面定义的方法,不管加不加public abstract修饰都默认为抽象方法
  • 接口中不能有构造器、代码块
  • public interface A {
        //成员变量(常量)
        //成员方法(抽象方法)
    }

  • 接口不能创建对象;接口是用来被类实现(implements)的,实现接口的类称为实现类
    修饰符 class 实现类 implements 接口1,接口2,接口3,...{......}
  • 一个类可以实现多个接口(接口可理解为义父),实现类实现多个接口,必须重写全部接口的所有抽象方法,否则实现类需要定义为抽象类

接口的好处 

  • 弥补了类单继承的不足,一个类可以同时实现多个接口
  • 让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现

示例:

假设一个类继承了学生类,但是这个类还想兼职别的工作,那就可以使用接口来实现

class Student{} //学生类

class A extends Student implements Waiter, Driver {} //一个类继承了学生类,同时也实现了服务员和司机类

interface Waiter {} //服务员接口

interface Driver {} //司机接口

public class Test {
    public static void main(String[] args) {
        Student a1 = new A();   //他可以是学生
        Waiter a2 = new A();    //也可以是服务员
        Driver a3 = new A();    //也可以是司机
    }
}
  • 既然是为了添加一些功能方法,为什么不直接在类里面多写几个呢?
  • 直接往类里面写的话,别人可能根本不知道你有这些功能,而使用接口实现的话,接口就相当于一个身份证明,实现了服务员接口,司机接口,别人一看也就知道你拥有哪些的功能,从而可以放心的把你当作哪种对象来使用了 

从jdk8开始,接口中新增的三种方法 

  1. 默认方法:必须使用default关键字修饰,默认会被public修饰
    default void test(){...}
    就是实例方法:也就是对象的方法,必须使用实现类的对象来访问
  2. 私有方法:必须使用private修饰
    private void test(){...}(jdk9开始才支持)
    也是实例方法:对象的方法,在接口的其它方法(默认方法、静态方法、私有方法)里面访问
  3. 静态方法:必须使用static修饰,默认会被public修饰
    static void test(){...}
    只能使用接口名去调用
  • 新增的这些方法增强了接口的能力,更便于项目的拓展和维护 

接口的多继承 

 一个接口可以同时继承多个接口

public interface C extends B ,A{...}

  • 便于实现类去实现:如果一个实现类需要实现多个接口,就可以使用一个接口继承那多个接口,然后实现类只需要实现这一个接口就相当于实现了那多个接口了,如果实现类只有一个可能作用不明显,但是如果有很多个实现类就可以体现出减少代码量的优势了

接口的注意事项

接口其他注意事项

  • 一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承
  • 一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现
  • 一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的
    示例代码:
    class Fu{
        public void test(){
            System.out.println("父类的test执行了");
        }
    }
    
    interface E{
        default void test(){
            System.out.println("E接口的test执行了");
        }
    }
    
    class Zi extends Fu implements E{
    
    }
    
    public class Test {
        public static void main(String[] args) {
            Zi z = new Zi();
            z.test();
        }
    }

    结果:

  • 一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可
    示例代码:
    interface A{
        default void test(){
            System.out.println("A的test执行了");
        }
    }
    
    interface B{
        default void test(){
            System.out.println("B的test执行了");
        }
    }
    
    class C implements A, B{
    
        @Override
        public void test() {
            System.out.println("C的test执行了");    //A和B的test方法重复了,重写解决报错
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            C c = new C();
            c.test();
        }
    }

    结果:

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

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

相关文章

Java实现高校大学生创业管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统公告模块2.2 创业项目模块2.3 创业社团模块2.4 政府政策模块2.5 创业比赛模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 系统公告表3.2.2 创业项目表3.2.3 创业社团表3.2.4 政策表 四、系统展示五、核心代码5.…

操作系统详解(5.2)——信号(Signal)的题目进阶

系列文章: 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 操作系统详解(5.1)——信号(Signal)的相…

linux终端上传github提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交

问题: 提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外 提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更 提示:(如 git pull ...&#xff…

走进Spring Boot 3.x时代(一)

目录 前言Spring Boot 2.x 时代Spring Boot 3.x 时代Spring Boot 3.x 新特性JDK调整平滑升级依赖调整最低环境要求配置属性兼容提高应用可观察性Jakarta EE升级的关键变更支持 GraalVM 原生镜像三方包升级Log4j2增强ConstructorBinding检测优化Micrometer 升级Micrometer Trac…

有哪些免费3D模型网站值得推荐?

设计师们经常需要一些免费的3D模型网站用来寻找各种类型的3D模型,如人物、动物、车辆、建筑、道具等,从而满足不同的设计需求以及设计灵感。那么有哪些免费3D模型网站值得推荐: ①建e网:建e网是一个提供3D模型下载的平台&#xff…

D20XB100-ASEMI开关电源桥堆D20XB100

编辑:ll D20XB100-ASEMI开关电源桥堆D20XB100 型号:D20XB100 品牌:ASEMI 封装:GBJ-5(带康铜丝) 平均正向整流电流(Id):20A 最大反向击穿电压(VRM&#…

【Python3】【力扣题】387. 字符串中的第一个唯一字符

【力扣题】题目描述: 【Python3】代码: 1、解题思路:遍历字符串,依次判断元素在字符串中的个数是否为1,第一个为1的返回该元素的索引号,若整个字符串都没有个数为1的,则返回-1。 知识点&#…

基于ssm的学籍管理系统论文

摘 要 当下,如果还依然使用纸质文档来记录并且管理相关信息,可能会出现很多问题,比如原始文件的丢失,因为采用纸质文档,很容易受潮或者怕火,不容易备份,需要花费大量的人员和资金来管理用纸质文…

vue+echarts 几个案例

普通柱状图 <template><!-- 容器默认宽高是0 如果不设置 页面不显示--><div ref"mychart" id"mychart"></div> </template><script> import * as echarts from "echarts" import axios from axiosexport …

致大家的一封信2024 — 对称性原理

紫光集团董事长李滨先生&#xff0c;作为融信产业联盟理事长每年都会为联盟成员发布一封新年信&#xff0c;与各联盟伙伴分享新一年的思考与感悟。今年&#xff0c;李滨先生围绕“对称性原理”进行了2024年的新年分享&#xff0c;并向大家带来新一年的美好祝福。 原文如下&…

python 二次封装Modbus库实现设备间Modbus通信

前言&#xff1a; 想想好久没有更博客了&#xff0c;今天忙中偷闲准备写一篇Modbus相关的分享。在进入工业领域之前我一直从事软件行业的测试工作&#xff0c;所以也没听过Modbus协议&#xff0c;但是自从进入西门子工作后正式进入了工业领域&#xff0c;所以对Modbus协议也就…

chromium+clangd快速代码跳转

在开发chromium的时候我们使用vscode工具进行开发&#xff0c;如果使用C插件发现很容就卡死计算机了。 所以我们使用clangd工具来查看chromium的代码。 一、安装 在vscode中安装还是很简单的。 输入cland&#xff0c;点击安装即可 二、生成编译数据库 代码编译完成后&…

javascript的变量存储机制和原理

前言 在了解javascript的变量存储机制之前需要了解javascript的数据类型&#xff0c;在js中&#xff0c;数据类型分为基本数据类型和引用数据类型。二者存在内存中&#xff0c;基本类型存在栈中&#xff0c;引用类型存储在堆里。 想查看javascript数据类型详细介绍请访问&…

Spring中的事件机制

文章目录 摘要正文jdk事件Spring事件Spring事件监听ApplicationContext主动监听注解监听Bean监听 Spring事件发布 总结 摘要 在这篇文章我们将介绍Spring的事件机制&#xff0c;包括Spring内置事件、自定义事件、事件监听、事件发布、事件广播机制、事件异常处理等内容。Sprin…

Codeforces Round 919 (Div. 2)

Problem - A - Codeforces n个约束条件 a x 求出满足n个约束条件的整数的个数 大于等于x&#xff0c;取最大的 小于等于x&#xff0c;取最小的 然后不等于x的&#xff0c;记录在区间范围内的个数&#xff0c;减去这些 #include<bits/stdc.h> #define endl \n #define …

【前后端的那些事】开源!treeSelect树形结构数据展示

文章目录 tree-selector1. 新增表单组件2. 在父组件中引用3. 父组件添加新增按钮4. 树形组件4.1 前端代码4.2 后端代码 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&#xff0c;想写文章&#xff0c;录视频把这些内容记录下。但这些功能太零碎&#xff0c…

快速前端开发01

前端开发 1 前端开发1.快速开发网站2.浏览器能识别的标签2.1 编码&#xff08;head&#xff09;2.2 title&#xff08;head&#xff09;2.3 标题2.4 div和span2.4.5 超链接2.4.6 图片小结2.4.7 列表2.4.8 表格2.4.9 input系列&#xff08;7个&#xff09;2.4.10 下拉框2.4.11 多…

PIFA天线设计经验分享

一、PIFA天线模型分析 从IFA天线的Smith圆图可以看出&#xff0c;其阻抗图随着频率的变化范围十分大&#xff0c;从端口Matrix data中的阻抗数据可以看到这一点。对于WIFI 2.4G频段的应用IFA输入阻抗频宽大致可以满足要求&#xff0c;但是对于其他带宽较宽的应用&#xff0c;该…

Hive 数据迁移

一、需求 同步集团的数据到断直连环境。 二、思路 三、同步数据&#xff08;方案&#xff09; 1、环境&#xff1a;断直连模拟环境 2、操作机器&#xff1a;ETL 机器 XX.14.36.216 3、工作路径&#xff1a;cd /usr/local/fqlhadoop/hadoop/bin 4、执行命令&#xff1a; 命令…

优思学院|质量管理应该看哪些书最好?

很多学员问我们&#xff0c;在探索质量管理博大精深的知识之旅中&#xff0c;应该看哪些书最好&#xff1f;我们推荐学员了解质量管理和精益六西格玛方法的发展史&#xff0c;从中了解质量管理思维的演变&#xff0c;及后再了解质量管理的工具和方法论&#xff08;包括从PDCA、…