【JavaSE】接口

news2025/7/19 16:51:47

前言:

作者简介:爱吃大白菜1132

人生格言:纸上得来终觉浅,绝知此事要躬行

 

如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!

 

如果觉得博主文章还不错的话,希望三连支持!

目录

1.接口 

1.1接口的概念 

1.2语法规则 

1.3接口的使用

1.4接口的特性

 1.5实现多个接口

 1.6接口间的继承

2.抽象类和接口的区别


1.接口 

1.1接口的概念 

        概念:接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。 

1.2语法规则 

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

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

注意:

  1. 创建接口时, 接口的命名一般以大写字母 I 开头.
  2. 接口的命名一般使用 "形容词" 词性的单词.
  3. 在接口中方法默认修饰 public abstract,阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.

1.3接口的使用

接口的使用方式:

用一个“实现类”来实现接口,重写接口中所有的抽象方法。 

举例:下方通过电脑为例。电脑输入设备有鼠标、键盘等,输入设备通过USB来与电脑交互,这就可以将USB 看作一个接口,让鼠标和键盘是 implements USB实现交互。

USB接口代码:

public interface IUSB {
    //打开USB接口
    void openUSB();
    //关闭USB接口
    void closeUSB();
}

Computer类代码:

package demo1;

class Mouse implements IUSB{

    @Override
    public void openUSB() {
        System.out.println("打开鼠标");
    }

    @Override
    public void closeUSB() {
        System.out.println("关闭鼠标");
    }
}

class KeyBoard implements IUSB {

    @Override
    public void openUSB() {
        System.out.println("打开键盘");
    }

    @Override
    public void closeUSB() {
        System.out.println("关闭键盘");
    }
}

public class Computer {
    public static void main(String[] args) {
        //测试接口
        IUSB keyboard =new KeyBoard();
        keyboard.closeUSB();
    }
}

1.4接口的特性

1. 接口类型是一种引用类型,但是不能直接new接口的对象

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

2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract。(只能是 public abstract,其他修饰符都会报错)

3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现。 

4. 重写接口中方法时,不能使用默认的访问权限 。

5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量 。

6. 接口中不能有静态代码块和构造方法。

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

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

9. jdk8中:接口中还可以包含default方法。 

public interface IUSB {
    void openUSB();
    void closeUSB();
    default void func(){
        
    }
}

 1.5实现多个接口

        在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。就像一个人只能有一个父亲,但他可以有多个干爹。

例子:通过动物来举例,动物园里有许多动物,有鹦鹉,鲨鱼,老虎,天鹅,他们分别有自己的本领,鹦鹉会飞,鲨鱼会游泳,老虎会奔跑,天鹅即会飞、游泳,又会奔跑。我们就将飞、游泳、奔跑写作接口,让他们一一的使用。

飞的接口:

package demo1;

public interface IFlying {
    void fly();
}

奔跑的接口:

package demo1;

public interface IRuning {
    void run();
}

游泳的接口:

package demo1;

public interface ISwimming {
    void swim();
}

动物园中的动物对这些接口的实际使用:

package demo1;

class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
//狗会跑
class Dog extends Animal implements IRuning{

    public Dog(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println(super.getName()+"跑");
    }
}
//鱼会游泳
class Fish extends Animal implements ISwimming{

    public Fish(String name) {
        super(name);
    }

    @Override
    public void swim() {
        System.out.println(super.getName()+"游泳");
    }
}
//鸟会飞
class Bird extends Animal implements IFlying {

    public Bird(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(super.getName()+"飞");
    }
}
//鸭子即会飞、游泳,又会奔跑
class Duck extends Animal implements IRuning,ISwimming,IFlying{
    public Duck(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(super.getName()+"飞");
    }

    @Override
    public void run() {
        System.out.println(super.getName()+"跑");
    }

    @Override
    public void swim() {
        System.out.println(super.getName()+"游泳");
    }
}
public class Zoo {
    public static void main(String[] args) {
        
    }
}

以上的代码展示了 Java 面向对象编程中最常见的用法: 一个类继承一个父类, 同时实现多种接口

        接口的作用就是将类的分类模糊化,举个例子,上方接口有一个接口是跑,我们知道,不仅仅有动物能跑,我们汽车也可以跑,那么,定义一个汽车类,我们只需将跑这个接口对接到汽车类中,汽车也可以实现跑的功能。

 1.6接口间的继承

        在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到 多继承的目的。

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

2.抽象类和接口的区别

核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法. 

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

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

相关文章

web课程设计网页规划与设计----公司官网带轮播图 (页面精美 1页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业,Web大学生网页 HTML:结构 CSS&#…

垃圾回收相关概念概述(宋红康JVM学习笔记)

System.gc() 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对…

java 基于springBoot上传文件/文件夹使用实例

最近项目中遇到一个文件批量上传的需求,对单个的文件、多文件或者文件夹的方式上传文件都可以满足要求,总结一下使用经验。 案例基于springBoot. 1、文件上传请求 这里postman测试了单文件和多文件的上传,同时测试了文件件方式上传。 postman…

物联网开发笔记(48)- 使用Micropython开发ESP32开发板之控制OLED ssd1306屏幕

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制OLED ssd1306屏幕,此处使用的是I2C协议,大家可自行百度学习一下I2C。 二、环境 ESP32 OLED ssd1306屏幕 Thonny IDE(或者WOKWI在线仿真) 几根杜邦线 本次使用在线仿真…

vue 项目在加载完成之前,显示预置加载动画

vue 项目在加载完成之前,显示预置加载动画 自己有一个日记项目,由于服务器带宽很小1MB,在加载之前页面中显示是空白的,就想给它加个前置的动画,这个用户体验更好。 一、实现 1. 定义项目入口 如果你是 pwa 应用&am…

[附源码]计算机毕业设计JAVA化妆品销售管理系统

[附源码]计算机毕业设计JAVA化妆品销售管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM myba…

SQL语句的约束 总结

目录 基本概念 主键约束 概念 操作 自增长约束 概念 操作 非空约束 概念 操作 唯一约束 概念 操作 默认约束 概念 操作 零填充约束 概念 约束总结 基本概念 主键约束 概念 主键约束相当于 唯一约束 非空约束 的组合,主键约束列不允许重复&am…

http网站升级为https网站,证书、http-flv视频显示处理

一、使用OpenSSL生成自签名证书 升级https网站需要自签名证书,证书在视频服务器Nginx中也需要,使用OpenSSL生成。 1.下载安装OpenSSL 2.以管理员身份运行cmd进入OpenSSL的安装目录查看安装版本 3.生成自签名证书。 生成私钥:openssl genr…

【 STM32Fxx串口问题-发送时间-发送字节拉长-每一位与下一位也拉长->>记录问题以及解决方式-复盘】

【 STM32Fxx串口问题-发送时间-发送字节拉长-每一位与下一位也拉长->>记录问题以及解决方式】前言环境问题描述(1)测试uart5时:(2)测试uart1时:原因点解决方式细节点总结前言 在做项…

1388. 3n 块披萨

文章目录1. 背2. 题目3. 答案1. 背 首先,考虑没有环的情况。如果没有环这道题可以转变为和打家劫舍II一毛一样。但是明明这道题是三块披萨一拿啊,打家劫舍是相邻不能拿,还是不一样啊。 这块证明挺难的,但是我可以用个简单的例子…

MicroPython-On-ESP8266——8x8LED点阵模块(1)驱动原理

MicroPython-On-ESP8266——8x8LED点阵模块(1)驱动原理 1. 8x8LED点阵模块介绍 1.1. 显示模块的升级 之前已经试过点亮8段数码管,并能够使用两片HC595芯片来驱动数码管。今天我又找来了一个8x8点阵LED屏,下面分析一下这个屏幕并…

【用户画像】Redis的简介和安装

文章目录一 Redis简介1 应用场景(1)业务系统:配合关系型数据库做高速缓存(2)大数据场景:缓存数据(3)大数据场景:临时数据(4)大数据场景&#xff1…

【计算机毕业设计】医院管理系统源码

一、系统截图(需要演示视频可以私聊) 一.摘要 目前各医疗机构中,绝大部分中小型医疗机构内部没有实现任何信息化管理,医院临床信息,业务流程的数据依然采取纸质记录,造成数据容易丢失&#xff…

CCSP通过经验 | 讲义覆盖的知识点更全面(含题型分析)

我一直就职于国内网络安全乙方,自2014年接触云安全后,一直希望能获取一个比较官方的云安全从业水平的资格证书。 在横向比较了如腾讯云、华为云、阿里云以及国外如亚马逊云认证后,在没有明确就职意向的情况下,选择了ISC2的认证资…

如何用等价类划分法设计测试用例, 来测试程序的日期检查功能?

某学籍排查系统要求学生输入入学日期,日期限制在2008年9月至2012年7月,即系统只能对该段期间内的学籍进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字 字符组成,前四位代表年&#xf…

多环境 运维

启动dev 同时包含 下面的 MVC DB 做配置时 如果 遇到相同参数 后加载的 覆盖前加载的 先加载 include 的 active 的是最后加载的 如果需要该 dev 需要该很多 include 换成 group 如果 active 是 dev 则加载dev组 如果 active 是pro 则加载pro组 在pom文件中 设置多环境 &l…

[UE][UE5]像素流送,像素流去掉黑边和按钮

[UE]这里写目录标题1.写在前面01.作者碎碎念02.结果演示截图视频教程2.需要准备的软件3.步骤01.准备一个打包好的项目02.启动服务器03.连接!去掉黑边和按钮结尾1.写在前面 01.作者碎碎念 2022.11.19初次更新 俺是不是很粗长!老仔细了,全是截图&#xf…

目标检测算法——YOLOv5/YOLOv7改进|结合涨点Trick之ASFF_Detect(自适应空间特征融合)

>>>深度学习Tricks,第一时间送达<<< 🚀🚀🚀NEW!!!魔改YOLOv5/YOLOv7目标检测算法来啦 ~ 💡💡魔法搭配计算机视觉领域各类创新新颖且行之有效的网络结构,平均精度均值mAP涨点明显,实验效果也俱佳。有需要的小伙伴可以在CSDN后台留言+点赞收藏…

Linux环境搭配

Linux环境搭配 文章目录Linux环境搭配1.Linux背景介绍1.1 系统发展史1.2 开源与官方网址1.3 企业Linux应用现状1.4 Linux发行版本2.Linux环境搭配2.1 Linux环境搭配方式2.2 服务器购买2.3 云服务器配置3.Linux远程登陆3.1 Linux桌面3.2 远程登陆工具3.3 Xshell登陆服务器(单用户…

开放式无线运动耳机怎么挑选,适合在运动佩戴的几款耳机推荐

作为一个运动爱好者而言&#xff0c;耳机是可以堪称灵魂伴侣&#xff0c;好比如在健身房运动的时候可以一边戴着耳机&#xff0c;一边在跑步机上刷着剧&#xff0c;不仅能将两小时的需求量直接浓缩为一小时的使用量&#xff0c;想想都觉得自己赚到了&#xff0c;但是在耳机选购…