接口interface--java学习笔记

认识接口

  • 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();
        }
    }

    结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 10_000 代表什么意思? 数字里面混夹着下划线?

先放一张图 ,这到底是sleep了多久? public static void main(String[] args) {int a 10_000; System.out.println(a); // 10000} java 7 的 特性 :https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals…

SCSI/UFS储存 基础

一、UFS协议 UniPro 的上面就是 UTP 和 SCSI 命令集,由于涉及的 SCSI 命令是很大一块需要单独来讲,所以这里只简单两笔。正如最开始提到的,UTP 和 SCSI 是属于 SCSI 这部分,在 JEDEC 的标准里能找到它们的具体说明。 UTP&#xf…

第一篇:node的背景及版本的检查

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 前言 Node.js 是一个基于 Chrome V8 JavaScript 引擎…

如何使用Docker一键部署WBO白板并实现固定公网地址远程访问

文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 前言 WBO在线协作白板是一个自由和开源的在线协作白板,允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用…

机器学习算法实战案例:VMD-LSTM实现单变量多步光伏预测

文章目录 机器学习算法实战案例系列答疑&技术交流1 数据处理1.1 导入库文件1.2 导入数据集1.3 缺失值分析 2 VMD经验模态分解3 构造训练数据4 LSTM模型训练5 预测 机器学习算法实战案例系列 机器学习算法实战案例:确实可以封神了,时间序列预测算法最…

《MyBatis》-- 流式查询内存性能优化-单条数据加工

阿丹-需求/场景: 在项目场景中涉及到数据二次加工。需要将单个对象数据转为按照规定的数据字典的转换。以及需要转换数据结构。从对象转换为按照规定的值和规则的数组。 因为要写入csv文件,涉及到文件的输出流。 之前讨论针对的解决方案: …

统计学R语言 实验3 点估计

统计学R语言 实验3 点估计 一、实验目的 1. 掌握理解点估计的相关概念和方法。 2. 掌握理解点估计的估计质量好坏判断方法。 3. 熟悉R语言等语言的集成开发环境。 二、实验分析与内容 某灯泡厂从某日生产的一批灯泡中抽取10个灯泡进行寿命试验,得到灯泡寿命&…

鸿蒙开发笔记(七):应用状态管理,LocalStorage及AppStorage的使用

开发者要实现应用级的,或者多个页面的状态数据共享,就需要用到应用级别的状态管理的概念。ArkTS根据不同特性,提供了多种应用状态管理的能力: LocalStorage:页面级UI状态存储,通常用于UIAbility内、页面间的…

FPGA 高端项目:基于 SGMII 接口的 UDP 协议栈,提供2套工程源码和技术支持

目录 1、前言给读者的一封信免责声明 2、相关方案推荐我这里已有的以太网方案本协议栈的 1G-UDP版本本协议栈的 10G-UDP版本本协议栈的 25G-UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、…

JRT核心竞争力

如果说JRT业务脚本化和发部署简单和打印导出客户端都不足以抵挡Spring用的人多的优势的话。那么这一篇让DolerGet给你一个选择JRT的理由,借助JRT自我实现的ORM,JRT有能力完全把控更新数据和删除数据的口径,和能够准确知道哪些是热点数据&…

细说JavaScript内置对象(JavaScript内置对象详解)

一、String对象 1、简单上手 2、构造方法 3、其他方法 3.1、charAt() 3.2、indexOf() 3.3、split() 3.4、substring() 3.5、substr() 4、实际操作 二、Math对象 1、简单上手 2、对象属性 3、对象方法 4、实际操作 三、Date对象 1、简单上手 2、构造方法 3、实…

Java零基础教学文档servlet(2)

【Servlet】 1.工程结构 2.J2EE平台 Java EE,Java平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为Jakarta EE。是Sun公司为企业级应用推出的标准…

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.…

GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

文章目录 0 入门资料1 物理引擎基本概念Actor & shapesRigid body dynamicsCollision DetectionCollision Resolution 应用与实践Character controllerRagdoll 0 入门资料 GAMES104-现代游戏引擎:从入门到实践_课程视频_bilibiliGAMES104官方账号 - 知乎课程主页…

时刻不忘为何而出发

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

Linux内核架构和工作原理详解(一)

简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序…

Bug:Goland左侧丢失项目结构(Goland常用快捷键)

Goland快捷键&小tips 1 常用快捷键 # 格式化代码 optioncommandL# 在项目中搜索文件中的内容 commandshiftF# 搜索.go文件 shiftshift(按两次shift)# 修改方法、变量(同时替换引用处的名称) fnshiftF6# 将选中代码抽取为方法…

QQ视频聊天怎么录制

虽然微信几乎成为主流的聊天工具,但是不可否认的是QQ视频聊天仍有他的趣味所在,多种特效在视频的时候增加乐趣,那么如果QQ视频聊天的时候可以录制聊天内容吗?当然是可以的。可以使用电脑自带的视频录制工具,或者QQ自带…

❤ React报错问题分析

❤ React报错问题分析 ❤️ You passed a second argument to root.render(…) but it only accepts one argument. You passed a second argument to root.render(…) but it only accepts one argument. react-dom.development.js:86 Warning: You passed a second argumen…

EOCR电动机保护器故障原因查询

在电动机保护方面,电子式电机保护器的应用越来越广泛。电子式电动机保护器可靠性强、灵敏度高,并具有多种保护功能,如:过电流、欠电流、缺相、逆相、堵转、三相不平衡、接地、短路等。 但有一部分电子式电动机保护器产品在检测到…