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

news2024/11/28 2:29:59

 ❤️❤️前言~🥳🎉🎉🎉

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 {
    @Override
    public void openDevice() {
        System.out.println("打开鼠标");
   }
     @Override
    public void closeDevice() {
        System.out.println("关闭鼠标");
   }
 
    public void click(){
        System.out.println("鼠标点击");
   }
}
 
// 键盘类,实现USB接口
public class KeyBoard implements USB {
    @Override
    public void openDevice() {
        System.out.println("打开键盘");
   }
 
    @Override
    public 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: 此处不允许使用修饰符private
    private 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 {
    @Override
    void 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.coloradmin.cn/o/1560619.html

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

相关文章

微信公众号账号迁移主体怎么变更?

公众号迁移有什么作用?只能变更主体吗?大家都知道,公众号是不支持直接变更主体的;但是很多情况下,我们又不得不进行账号主体的更换;这时候,我么就可以通过账号迁移功能,将A公众号的粉…

MySQL使用技巧,高级Java开发必看

insert into tab(col1,col2…) select … 5、活用正则表达式 regexp ^ $ . * | 6、关联查询比子查询效率快,优先使用join关联查询 7、if(exp,v1,v2) if()函数的使用 exp:表达式 v1:exp为真时返回的值 v2:exp为假时返回的值 8、case when… then… else… en…

广和通发布基于高通高算力芯片的具身智能机器人开发平台Fibot

3月29日,为助力机器人厂商客户快速复现及验证斯坦福Mobile ALOHA机器人的相关算法,广和通发布具身智能机器人开发平台Fibot。作为首款国产Mobile ALOHA机器人的升级配置版本,开发平台采用全向轮底盘设计、可拆卸式训练臂结构,赋予…

AI如何影响装饰器模式与组合模式的选择与应用

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:设计模式深度解析:AI如何影响…

[C/C++] -- 二叉树

1.简介 二叉树是一种每个节点最多有两个子节点的树结构,通常包括:根节点、左子树、右子树。 满二叉树: 如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k&a…

10、电科院FTU检测标准学习笔记-双遥信及变位优先验证

———————————————————————————————————— 作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参…

电脑win10系统更新后开机很慢,更新win10后电脑开机怎么变慢了

很多用户反映,更新win10后电脑开机怎么变慢了呢?现在动不动就要30几秒,以前都是秒开机的,要怎么设置才能提高开机速度?小伙伴们别着急,主要原因可能是关机设置中没有勾选启用快速启动,或者是开机启动设置的问题,针对开机变慢的情况,小编整理了2个处理方法,接下来,我…

U盘PE引导-系统安装操作

U盘PE引导-系统安装操作 1. U盘接入电脑,开机按F12(DELL)选择U盘引导,按回车,如图2.选择进入PE 系统3.进入PE 系统后,运行 WinNTSetup 安装器, 具体 设置如下图 1. U盘接入电脑,开机…

C语言键盘输入与屏幕输出——数据的格式化键盘输入

目录 数据的格式化键盘输入 输入数据的格式控制 scanf()的格式字符 scanf()的格式修饰符 数据的格式化键盘输入 格式 scanf(格式控制字符串,输入地址表); 输入数据的格式控制 格式 scanf(…

深度学习:AIGC重塑金融大模型驱动金融变革

作者:林建明 来源:IT阅读排行榜 本文摘编自《AIGC重塑金融:AI大模型驱动的金融变革与实践》,机械工业出版社出版这是最好的时代,也是最坏的时代。尽管大模型技术在金融领域具有巨大的应用潜力,但其应用也面…

Stream流的详细说明

什么是stream流 Stream流是指一种数据处理的概念,它可以将数据以连续的方式传输,而不用等待整个数据集全部加载完成。在计算机编程中,Stream流通常用于处理大数据集或实时数据流。 Stream流可以分为输入流和输出流,输入流用于从数…

Python 唯一标识符(UUID)库之shortuuid使用详解

概要 在现代软件开发中,唯一标识符(UUID)在数据记录、身份验证和唯一性标识等方面扮演着重要的角色。然而,标准的UUID通常很长,不方便使用。Python的shortuuid库应运而生,它可以生成短且易读的唯一标识符,方便在各种应用场景中使用。本文将深入探讨shortuuid库的特性、…

Docker Desktop 在 Windows 上的安装和使用

目录 1、安装 Docker Desktop 2、使用 Docker Desktop (1)运行容器 (2)查看容器信息 (3)数据挂载 Docker Desktop是Docker的官方桌面版,专为Mac和Windows用户设计,提供了一个简…

第3章 数据链路层(2)

3.4 流量控制和可靠传输机制 数据链路层流量控制控制相邻节点发送速率。 使用确认和超时重传两种机制实现可靠传输。 3.4.1 流量控制,可靠传输与滑动窗口机制 1.停止—等待协议协议基本原理 发送方发每发送一帧,等待接收方回应的ACK发送下一帧或超出计时没收到ACK就重发。 2.滑…

将python项目封装打包为.so文件(多级目录)

原始目录 segment-anything文件夹 结果目录 删除了用于测试、说明的相关文件,更改了一些文件名称,使用main.py作为入口程序。 segment-anything文件夹 具体实现 1.删除不必要的文件 2.改segment-anything为seg 3.改amg_test.py 改test.py 改./seg/pr…

4.java openCV4.x 入门-Mat之创建、复制

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 🧭文…

C# 高级文件操作与异步编程探索(初步)

文章目录 文本文件的读写探秘StreamReader 类深度剖析StreamWriter 类细节解读编码和中文乱码的解决方案 二进制文件的读写BinaryReader 类全面解析BinaryWriter 类深度探讨 异步编程与C#的未来方向同步与异步:本质解读Task 的神奇所在async/await 的魔法 在现代编程…

window配置RUST开发环境详解

1.先安装VS2022: 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux (microsoft.com) 2.下载Rustup-init.exe Other Installation Methods - Rust Forge 3.运行rustup-init.exe开始安装rust开发环境: 安装成功出现下图所示 %USERPROFILE%\.cargo\bin 添加cargo安装路…

mysql 本地电脑服务部署

前提: 下载mysql 新建配置文档 在安装mysql目录新建 my.ini [mysqld] # 设置3306端口 port3306#设置mysql的安装目录 basedirC:\Program Files\MySQL\MySQL Server 8.3 #切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有…

【软件工程】详细设计(一)

1. 引言 1.1 编写目的 该文档的目的是描述《学生成绩管理系统》项目的详细设计,其主要内容包括: 系统功能简介 系统详细设计简述 各个模块的实现逻辑 最小模块组件的伪代码 本文档的预期的读者是: 开发人员 项目管理人员 测试人员 …