接口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{@Overridepublic 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.mzph.cn/news/627089.shtml

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

相关文章

高通Android12增加自定义实体按键

1、设备树增加pinctrl LA.UM.9.15.2/kernel/msm-4.19/arch/arm64/boot/dts/qcom/sc12x-evk/scuba-pinctrl.dtsi&soc {tlmm: pinctrl@500000 {...gpio_key_1: gpio_key_1 {mux {pins = "gpio104";function = "gpio";};config

武汉灰京文化:抓住用户心理,游戏推广不可或缺的前提

在当今激烈竞争的游戏市场中,了解目标用户成为游戏推广的不可或缺的前提。不同类型的游戏适合不同的用户群体,因此通过深入研究用户画像,准确定位目标用户群体,成为游戏成功推广的关键一环。游戏推广不仅仅是让更多的人知道游戏的…

MOJO交互

文章目录 Mojo不仅非常适合编写高性能代码,而且还允许我们利用庞大的Python库和工具生态系统。有了无缝的Python互操作性,Mojo可以使用Python做它擅长的事情,尤其是gui,而不会牺牲关键代码的性能。让我们以经典的Mandelbrot集合算…

运筹说 第84期 | 网络计划-网络图的基本概念

自华罗庚教授将网络计划技术引入我国,网络计划已取得巨大发展。本期开始,小编将从网络图基本概念、时间参数计算、网络计划优化和图解评审法等方面对网络计划进行系统的介绍。 01前言 20世纪50年代以来,产生了许多计划管理的新方法&#xf…

【java八股文】之计算机网络系列篇

1、TCP/IP和UDP模型 TCP/IP分层(4层):应用层,传输层,网络层,数据链路层 网络的七层架构 (7层):应用层,表示层,会话层,传输层&#xff…

「HDLBits题解」Multiplexers

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接:Mux2to1 - HDLBits module top_module( input a, b, sel,output out ); assign out sel ? b : a ; endmodule题目链接&#xff…

Python学习之路-多任务:线程

Python学习之路-多任务:线程 简介 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。操作系统轮流让各个任务交替执行,表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快…

【健康小贴士】关节炎是不是冻出来的?

大家冬天肯定被父母唠叨过: 「天气这么冷,裤子穿这么短,小心得关节炎!」 ❌这种说法其实是不对的或者并不全面,答案来了👀

快快销ShopMatrix 分销商城多端uniapp可编译5端 - 佣金倍数提现

本文来自应用中心-9999款应用在线选购 "佣金倍数提现"这个概念在不同的上下文中可能有不同的含义,但通常它涉及到基于用户赚取的佣金来设定提现条件。这是一种常见的机制,尤其是在那些提供佣金或回扣的平台上,如联盟营销、金融交易…

数字前端/FPGA设计——握手与反压问题

声明:本文来自0431大小回 前言:在芯片设计或者FPGA设计过程中,流水设计是经常用到的,但是考虑数据安全性,需要与前后级模块进行握手通信,这时候就需要对流水数据进行反压处理,本文将具体介绍握手…

GO自研微服务框架-页面渲染

页面渲染 在实际开发中,接口返回需要支持返回HTML,JSON,XML等,在HTML返回中,要支持模板 1. HTML 渲染HTML,需要明确几个元素 content-type text/html; charsetutf-8模板Template渲染数据 渲染页面的操作…

开源内网穿透工具FRP配置SSH和网站访问,构建本地私有云NAS,非常详细的配置细节,复刻即可成功

简介: FRP 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。名称其实就是使用了 Fast Reverse Proxy 的首字母缩写。 需求: 有…

基于英特尔傲腾持久内存的下一代高性能计算存储系统DAOS

本文内容来自 Intel极限存储架构和开发首席工程师 梁震 在2021CCF全国高性能计算学术年会(CCF HPC China 2021)上的演讲资料,供大家参考。 目录 - 分布式异步对象存储(DAOS)的系统架构 - DAOS系统栈结构 - DAOS 的部署方式 - DAOS 存储服…

WebGL在家居设计领域中的应用

WebGL(Web Graphics Library)是一种用于在Web浏览器中进行3D图形渲染的JavaScript API。在家居设计方面,WebGL可以提供一些强大的应用,使用户能够交互式地浏览和体验设计方案。以下是一些家居设计领域中WebGL的应用,希…

Linux 文件搜索大师:掌握 find 命令的艺术与示例

🧙‍♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &…

括号匹配(带优先级)栈C++

在算术表达式中&#xff0c;除了加、减、乘、除等运算外&#xff0c;往往还有括号。包括有大括号 {}&#xff0c;中括号 []&#xff0c;小括号 ()&#xff0c;尖括号 <> 等。 对于每一对括号&#xff0c;必须先左边括号&#xff0c;然后右边括号&#xff1b;如果有多个括…

蓝桥杯:随意组合

题目描述&#xff1a; 算法思路&#xff1a; 主要是将其中一个数组进行全排列&#xff0c;16中排列顺序&#xff0c;再与 另外一个数组进行匹配求和。在这里就要用到next_permutation()函数&#xff0c;具体用法就是直接用数组a[]&#xff0c;进行排序next_permutation(a&…

芯品荟|电梯外呼面板屏驱市场调研报告

PART ONE 产品简介 - Introduction - 1.电梯外呼面板介绍 电梯外呼面板&#xff0c;用于显示电梯当前位置、运行状态和楼层信息&#xff0c;以便乘客在等待电梯时了解电梯的运行情况。 电梯外呼面板&#xff0c;按显示屏的种类&#xff0c;分为3类&#xff0c;分别是LED屏、L…

处理HTTP请求中的表单数据

处理HTTP请求中的表单数据是Web开发中常见的任务。在Go语言中&#xff0c;可以使用net/http包来解析HTTP请求中的表单数据。 首先&#xff0c;确保你已经创建了一个HTTP服务器&#xff0c;并且能够接收和处理POST请求。然后&#xff0c;你可以使用r.ParseForm()函数来解析请求…

Android项目架构怎么做

项目架构指南 本指南包含一些最佳做法和推荐架构&#xff0c;有助于构建强大而优质的应用。 注意&#xff1a; 本页假定您对 Android 框架有基本的了解。 移动应用用户体验 典型的 Android 应用包含多个应用组件&#xff0c;包括 Activity、Fragment、Service、内容提供程序…