抽象类和接口(2)(接口部分)

 ❤️❤️前言~🥳🎉🎉🎉

hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 

💥个人主页:E绵绵的博客
💥 所属专栏:JAVASE题目练习  JAVASE知识点专栏  c语言知识点专栏   c语言题目练习

                         那现在我们就开始接口的学习吧。(接口这部分作者打算两篇文章介绍完)

接口的概念

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。

在Java中,接口可以看成是:多个类的公共规范,它是一种引用数据类型。

接口的语法规则

接口的定义格式与定义类的格式基本相同,将class关键字换成interface 关键字,就定义了一个接口。

​
public interface 接口名称{// 抽象方法public abstract void method1();   // public abstract 是固定搭配,可以不写public void method2();abstract void method3();void method4();// 注意:在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁
}​

❤️❤️提示:

1. 创建接口时, 接口的命名一般以大写字母开头.

2. 阿里编码规范中约定, 接口中的方法和属性一般不要加任何修饰符号(除default,static), 保持代码的简洁性.  

 接口的使用

💥💥接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法。 

注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。

// USB接口
public interface USB {void openDevice();void closeDevice();
}// 鼠标类,实现USB接口
public class Mouse implements USB {@Overridepublic void openDevice() {System.out.println("打开鼠标");}@Overridepublic void closeDevice() {System.out.println("关闭鼠标");}public void click(){System.out.println("鼠标点击");}
}// 键盘类,实现USB接口
public class KeyBoard implements USB {@Overridepublic void openDevice() {System.out.println("打开键盘");}@Overridepublic void closeDevice() {System.out.println("关闭键盘");}public void inPut(){System.out.println("键盘输入");}
}// 笔记本类:使用USB设备
public class Computer {public void powerOn(){System.out.println("打开笔记本电脑");}public void powerOff(){System.out.println("关闭笔记本电脑");}public void useDevice(USB usb){usb.openDevice();if(usb instanceof Mouse){Mouse mouse = (Mouse)usb;mouse.click();}else if(usb instanceof KeyBoard){KeyBoard keyBoard = (KeyBoard)usb;keyBoard.inPut();}usb.closeDevice();}
}// 测试类:
public class TestUSB {public static void main(String[] args) {Computer computer = new Computer();computer.powerOn();// 使用鼠标设备computer.useDevice(new Mouse());// 使用键盘设备computer.useDevice(new KeyBoard());computer.powerOff();}
}

🎯🎯接口特性

❤️❤️1.  接口类型是一种引用类型,但是不能直接用它创建接口的实例对象,只能当作引用变量去接收跟其有(implements)实现关系的类的实例对象。

public class TestUSB {public static void main(String[] args) {USB usb = new USB();}
}// Error:(10, 19) java: day20210915.USB是抽象的; 无法实例化

 ❤️❤️2.接口中的成员变量类型都必须是 public static final ,如果我们不写 public static final或者缺一部分它都依然代表public static final。

但切记如果其中出现了不同的修饰词,那就会报错,如protected static 这种直接报错,因为出现了不同的修饰词(缺少一部分都不要紧,就是不能出现不同的修饰词)

public interface USB {double brand = 3.0;  // 默认被:final public static修饰void openDevice();void closeDevice();
}public class TestUSB {public static void main(String[] args) {System.out.println(USB.brand);   // 可以直接通过接口名访问,说明是静态的// 编译报错:Error:(12, 12) java: 无法为最终变量brand分配值USB.brand = 2.0;       // 说明brand具有final属性}
}

❤️❤️🎯🎯 (重点)3.接口当中的方法分为三种: 抽象方法,static修饰的方法,default修饰的方法

1.抽象方法必须是public abstract类型,其道理跟接口的成员变量一样,都是能缺块,甚至不写,但不能出现不同。

其抽象方法不能被直接实现(需要重写去间接实现),而接下来的下面两种方法都是能被直接实现的。

​
interface USB {// Error:(4, 18) java: 此处不允许使用修饰符privateprivate void openDevice();void closeDevice();
}​

2.接口中static修饰的方法类型必须为public static ,可以隐藏变为static。其不能被重写。它的使用方式跟平常所见的static修饰方法没区别

3.用defalut修饰的类型同理必须为public defalut,可以隐藏变为defalut。对于该方法,可以不重写,也可以重写。我们可以认为它跟普通类中的非静态方法一样,使用也是跟非静态方法差不多的。

 ❤️❤️4.重写接口中方法时,访问修饰符必须为public

public interface USB { public class Mouse implements USB {@Overridevoid openDevice() {System.out.println("打开鼠标");}// ...
}// 编译报错,重写USB中openDevice方法时,不能使用默认修饰符
// 正在尝试分配更低的访问权限; 以前为public

❤️❤️5.接口中不能有静态代码块,实例代码块,构造方法出现,否则会报错

public interface USB {// 编译失败public USB(){}{}    // 编译失败void openDevice();void closeDevice();
}

 ❤️❤️🎯🎯 (重点)6接口中的成员访问修饰符想必大家都清楚,都是默认且必须用public访问修饰符修饰。而到了我们的接口,其不需要用访问修饰符修饰,默认就是public修饰符,如果你用访问修饰符修饰,则会报错。

❤️❤️7 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class,也是有对应的字节码文件。

❤️❤️8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。

🎯🎯实现多个接口//继承和接口并用

💕💕 在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是我们的一个类可以实现多个接口。

而且一个类还可以在继承父类的同时实施多个接口。

注意继承和接口并用的话,extends必须在implements前面,否则会报错。

🎯🎯 对于继承和接口并用时的子类内存分布如下,以下图为例。

下图代码能证明内存分布跟我们上图中的一样

正是因为都独立存在于子类中,所以在子类的实例对象中中找a变量才不明确,不确定为哪个。

 接口间的继承

❤️❤️在接口中,继承是指一个接口可以继承一个接口或多个接口(注意可以继承多个接口)接口中的继承可以通过关键字"extends"来实现,通过继承父接口可以拥有父接口的方法和属性,并且可以在子接口中添加新的方法和属性。子接口可以使用继承的方法和属性。

对于接口继承后的使用,是跟普通类继承的使用一样。

继承的好处是可以实现代码的重用和模块化,提高代码的可维护性和可扩展性。通过继承,可以将一些通用的方法和属性定义在父接口中,然后让多个子接口去继承这些通用的方法和属性,从而避免了重复编写相同的代码。

interface IRunning {void run();
}interface ISwimming {void swim();
}// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {}class Frog implements IAmphibious {...
}

通过接口继承创建一个新的接口 IAmphibious 表示 "两栖的". 此时实现接口创建的 Frog 类, 就要重写 run 方 法, 也需要重写 swim 方法.

接口间的继承相当于把多个接口合并在一起.

接口第一部分完结

 那么到这里我们的接口第一部分就结束了:把该讲的语法大部分讲完了。之后将会给大家带来接口第二部分:接口使用实例,这部分会比较难点,不过只要努力坚持下去,一切困难都会被攻克的,一起加油吧!👊 👊 

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

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

相关文章

增加网站搜索引擎排名的6个准则

怎样提高网站排名首页 在竞争激烈的网络世界中,网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页,意味着更多的曝光和点击率。以下是一些方法,可以帮助您提高网站在搜索引擎中的排名,让其跻身首页&#xf…

2014年认证杯SPSSPRO杯数学建模A题(第二阶段)轮胎的花纹全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 A题 轮胎的花纹 原题再现: 轮胎被广泛使用在多种陆地交通工具上。根据性能的需要,轮胎表面常会加工出不同形状的花纹。在设计轮胎时,往往要针对其使用环境,设计出相应的花纹形状。   第二阶段问…

SAP 销售分销中的免费货物

销售业务中,免费货物在您与客户协商价格时起着重要作用。在零售、化工或消费品这样的行业部门中,通常以免费货物的形式向客户提供折扣。 作为用户,业务用户希望能自动确定免费货物并将它们归入销售凭证中。同时需要向成本控制部门提供免费货物…

SOC内部集成网络MAC外设+ PHY网络芯片方案:PHY芯片基础知识

一. 简介 本文简单了解一下 "SOC内部集成网络MAC外设 PHY网络芯片方案" 这个网络硬件方案中涉及的 PHY网络芯片的基础知识。 二. PHY芯片基础知识 PHY 是 IEEE 802.3 规定的一个标准模块。 1. IEEE规定了PHY芯片的前 16个寄存器功能是一样的 前面说了&#xf…

[优选算法专栏]专题十五:FloodFill算法(二)

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

基于8086多路模拟采集LED报警系统设计

**单片机设计介绍,基于8086多路模拟采集LED报警系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086多路模拟采集LED报警系统设计概要 一、引言 在工业控制、环境监测以及智能家居等领域,多…

探索http-vue-loader的奥秘:原理、使用方法、在Vue开发中的应用

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

软考历史题目

2023.3 1. 磁盘索引块1KB,每个地址项4字节,每个磁盘索引块可以存放256个物理块地址 2.5个地址项为直接索引地址,所以0-5逻辑块是直接索引 3.一级间接地址索引,每个指向的物理块存255个地址 4.二级间接地址:256个间接索引表地址…

碧桂园服务:以进促稳,年收入增长至人民币约426.1亿元

碧桂园服务控股有限公司今日发布截至2023年12月31日十二个月报告期内之经审核综合业绩。2023年,碧桂园服务收入持续增长至人民币约426.1亿元。同时,业务发展保持稳健且市场化程度高,来自于第三方的收入占比进一步提升达到新高至约96.9%。 业绩…

提高编程效率的VScode插件

1.Prettier Prettier 是一种广泛使用的采用代码格式化程序,在您的项目中强制执行一致的代码风格。它支持各种编程语言 并根据预定义的规则自动格式化您的代码,从而增强可读性并减少与样式相关的冲突。 2.远程 SSH Visual Studio Code 的 远程 – SSH…

DSSS-UQPSK学习笔记

文章目录 非平衡四相键控-直接序列扩频(UQPSK-DSSS)信号因其能同时传输两路不同功率、不同速率信号的特点,在需要图象和数据综合业务传输的领域得到了广泛应用。 系统信号的调制方式为非平衡四相键控(Unbalanced Quadrature Phase…

注册接口和前置SQL及数据生成及封装

注册接口 演示注册接口的三步操作:【注册流程逻辑】 第一步:发送注册短信验证码接口请求 请求方法: put 请求地址:http://shop.lemonban.com:8107/user/sendRegisterSms 请求参数:{“mobile”:“13422337766”} 请求头…

​打破牙医恐惧 从牙一齿科开始——记杭州资深口腔专家武建潮博士与他的牙科品牌

生机勃勃的绿植花卉,温馨亲切的原木装修,卡通乐园般的儿童诊室,一应俱全的先进设备……走进位于浙江省杭州市余杭区荆长路590-1-A的牙一齿科,温暖的气息扑面而来,细致热情的服务更让人如沐春风,任谁都很难想…

1.8 python 模块 time、random、string、hashlib、os、re、json

ython之模块 一、模块的介绍 (1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句 (2)python对象定义和python语句 (3)模块让你能够有逻辑地…

Redis 全景图(2)---- 关于 Redis 的三“高”

前言 我们继续写第一篇文章没写完的。其实我也不想将我写的一篇 Redis 文章分成几篇中短文来写,但是没办法,我一次写个1万字,会限流,所以将就一下吧。 上篇文章我用了 Redis 的6大模块这个思路来描绘我脑子中的 Redis。其实这6大…

密码算法概论

基本概念 什么是密码学? 简单来说,密码学就是研究编制密码和破译密码的技术科学 例题: 密码学的三个阶段 古代到1949年:具有艺术性的科学1949到1975年:IBM制定了加密标准DES1976至今:1976年开创了公钥密…

Golang | Leetcode Golang题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {if len(nums1) > len(nums2) {return findMedianSortedArrays(nums2, nums1)}m, n : len(nums1), len(nums2)left, right : 0, mmedian1, median2 : 0, 0for left <…

app自动化-Appium学习笔记

使用Appium&#xff0c;优点&#xff1a; 1、支持语言比较多&#xff0c;例如&#xff1a;Java、Python、Javascript、PHP、C#等语言 2、支持跨应用&#xff08;windows、mac、linux&#xff09; 3、适用平台Android、iOS 4、支持Native App(原生app)、Web App、Hybird App…

算法系列--递归,回溯,剪枝的综合应用(1)

&#x1f495;"对相爱的人来说&#xff0c;对方的心意&#xff0c;才是最好的房子。"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–递归,回溯,剪枝的综合应用(1) 大家好,今天为大家带来的是算法系列--递归,回溯,剪枝的综合应用(1) 1.全排…

使用Redis集合List实现消息队列

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型…