Java进阶----接口interface

接口

接口概述

  • 接口是一种规范,使用接口就代表着要在程序中制定规范.

制定规范可以给不同类型的事物定义功能,例如:

  • 利用接口,给飞机、小鸟制定飞行规范,让其都具备飞行的功能;
  • 利用接口,给鼠标、键盘、音响制定连接规范,让其都具备连接的功能;

接口制定规范通常只规定有哪些功能,不限制功能的具体内容。需要由遵循规范的事物自己去实现,例如:

  • 飞行规范只是让飞机、小鸟具备飞行的功能,但具体怎么飞,由它们自己决定
  • 连接规范只是让鼠标、键盘、音响都拥有可以被连接的功能,但具体怎么连接,由它们自己决定

接口的定义格式

public interface Inter {   
	// 常量
    // 抽象方法
 }

注意:

  1. 接口中的变量必须是常量,默认被 public static final 修饰
  2. 接口中的方法默认是抽象方法,默认被 public
    abstract
    修饰
  3. 接口不能创建对象

接口的使用方式

接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类

  • 接口可以被类单实现,也可以被类多实现
  • 注意:一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类
修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {
      ……
}

接口和抽象类的区别

  1. 一个类只能继承一个抽象类,一个类可以实现多个接口。
  2. 继承父类和实现接口并不冲突,可以同时使用。
  3. 功能上:抽象类是对同一类型事物的抽取
    (例如:猫和狗),接口是对不同类型事物具有相同行为的规范。
    实例1:
public class Demo01 {
    public static void main(String[] args) {
        //需求:定义一个数学接口MathInter,给其定义成员变量PI(圆周率)和成员方法add(加法)
        //1.定义好接口后,尝试创建MathInter对象,代码报错(接口不能创建对象)
        //new MathInter();

        //2.使用MathInter提供的圆周率
        System.out.println(MathInter.PI);

        //3.尝试修改圆周率
        //MathInter.PI = 6.66;

        //4.要想使用接口,需要定义类去实现接口
        //定义Computer电脑类,实现Math数学接口

        //5.创建实现类对象,调用重写的方法
        Computer computer = new Computer();
        computer.add(1, 2);

        //6.需求:再定义一个播放接口PlayerInter,制定播放规范,让Computer去实现
        computer.play();
    }
}
public interface MathInter {

    //2.要求有圆周率提供给其他人使用
    //public static final double PI = 3.14;
    //注意:接口中的成员变量只能是常量,默认被 public static final
    double PI = 3.14;

    //3.要求有加法
    //public abstract void add(int a, int b);
    //接口中的方法默认就被 public abstract修饰
    void add(int a, int b);
}
public interface PlayerInter {
    void play();
}
public class Computer implements MathInter, PlayerInter {
    //2.类实现接口,必须要重写接口的所有抽象方法!
    @Override
    public void add(int a, int b) {
        System.out.println("加法结果:" + (a + b));
    }

    @Override
    public void play() {
        System.out.println("播放小视频");
    }
}

实例二:
定义USB接口制定规范,要求所有USB设备都拥有接入(connect)和断开(disconnect)功能

  • 定义Mouse鼠标类和Keyboard键盘类,要求实现USB接口,遵循USB制定的规范
  • Mouse鼠标的特有功能:点击(click)
  • Keyboard键盘的特有功能:打字( typewrite )

1.定义UsbInter接口,制定规则:接入(connect)和断开(disconnect)

public interface UsbInter {
    void connect();
    void disconnect();
}

2.定义鼠标Mouse类和键盘Keyboard类作为接口实现类,重写接口的方法

public class Keyboard implements UsbInter {
    @Override
    public void connect() {
        System.out.println("接入键盘");
    }

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

    //2.特有功能:打字
    public void typewrite() {
        System.out.println("键盘敲烂,月薪过万!");
    }
}

public class Mouse implements UsbInter{
    @Override
    public void connect() {
        System.out.println("鼠标连接");
    }

    public void Click(){
        System.out.println("鼠标点击");
    }

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

}

3.分别创建Mouse鼠标对象和Keyboard键盘对象

public class Demo02 {
    public static void main(String[] args) {
  
        Mouse mouse = new Mouse();
        Keyboard keyboard = new Keyboard();

        //依次调用usb的接入方法、各自特有的方法、usb的断开方法
        mouse.connect();
        mouse.click();
        mouse.disconnect();
        System.out.println("-----------------");

        keyboard.connect();
        keyboard.typewrite();
        keyboard.disconnect();
    }
}

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

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

相关文章

简易Qt串口助手

界面显示如下 关于串口类 初始化 设置串口号 设置波特率 打开串口 发送按钮功能实现 接收数据显示在控件中 关闭串口

Vortex GPGPU的硬件设计和代码结构分析

文章目录 前言一、GPGPU是什么?1.1 GPU和GPGPU之间的差异1.2 GPU和CPU之间的集成方式1.3 GPU包含什么(列举和VMIPS向量体系结构的差异) 二、Vortex GPGPU是什么?2.1 Vortex GPGPU的技术边界和验证环境2.2 Vortex GPGPU的指令集设计…

30万的剧本杀店 被“好色”店长玩死了

文|琥珀食酒社 作者 | 朱珀 对开店搞钱的人来讲 什么才是最苦逼的? 不是一开始生意就不行 而是刚开始好到不行 最后只剩下不行 本期投稿的主人公糊糊 就是这样的 苦逼大BOSS 30万开剧本杀店 短短几个月 从巅峰跌到谷底 被捞钱又好色的猪队友…

C++ 类和对象 拷贝构造函数

一 拷贝构造函数的概念: 拷贝构造函数是一种特殊的构造函数,用于创建一个对象是另一个对象的副本。当需要用一个已存在的对象来初始化一个新对象时,或者将对象传递给函数或从函数返回对象时,会调用拷贝构造函数。 二 拷贝构造函…

LabVIEW高能质子束流密度分布测试系统

LabVIEW平台开发的高能质子束流密度分布测试系统。该系统主要应用于电子器件的抗辐射加固试验,旨在精确测量高能质子束的密度分布,以评估电子器件在辐射环境下的性能表现和耐受能力。 系统组成与设计 硬件组成: 法拉第杯探测器:…

自动化测试高级控件交互方法:TouchAction、触屏操作、点按,双击,滑动,手势解锁!

在自动化测试领域中,TouchAction 是一种非常强大的工具,它允许我们模拟用户在设备屏幕上的各种触摸事件。这种模拟不仅限于简单的点击操作,还包括滑动、长按、多点触控等复杂的手势。 点按与双击 点按和双击是触屏设备上最基本的操作之一。…

数据库图形化管理界面应用 Navicat Premium 使用教程

经同学介绍的一个把数据库可视化的软件Navicat Premium,很好用,在这里分享一下,需要的同学可以去了解看看 一:下载并解压 链接:https://pan.baidu.com/s/1ZcDH6m7EAurAp_QmXWx81A 提取码:e5f6 解压到合…

景芯SoC训练营DFT debug

景芯训练营VIP学员在实践课上遇到个DFT C1 violation,导致check_design_rule无法通过,具体报错如下: 遇到这个问题第一反映一定是确认时钟,于是小编让学员去排查add_clock是否指定了时钟,指定的时钟位置是否正确。 景芯…

Redis原理-数据结构

Redis原理篇 1、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存…

【操作系统】进程管理——进程的同步与互斥(个人笔记)

学习日期:2024.7.8 内容摘要:进程同步/互斥的概念和意义,基于软/硬件的实现方法 进程同步与互斥的概念和意义 为什么要有进程同步机制? 回顾:在《进程管理》第一章中,我们学习了进程具有异步性的特征&am…

Apache AGE中的图

图由一组点和边组成,其中每个节点和边都具有属性映射。点是图的基本对象,可以独立于图中的其他任何对象存在。边创建了两个点之间的有向连接。 创建图 要创建图,可以使用 ag_catalog 命名空间中的 create_graph 函数。 create_graph() 语法…

C++进阶-二叉树进阶(二叉搜索树)

1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于…

Jenkins教程-15-常用插件-Blue Ocean

上一小节我们学习了Jenkins定时任务构建的方法,本小节我们讲解一下Jenkins常用插件Blue Ocean的使用方法。 Blue Ocean 提供了一套可视化操作界面来帮助创建、编辑 Pipeline 任务。 Blue Ocean 特性: 流水线编辑器:用于创建贯穿始终的持续交…

一、redis-万字长文读懂redis

高性能分布式缓存Redis `第一篇章`1.1缓存发展史&缓存分类1.1.1 大型网站中缓存的使用带来的问题1.1.2 常见缓存的分类及对比与memcache对比1.2 数据类型选择&应用场景1.2.1 string1.2.2 hash1.2.3 链表1.2.4 set1.2.5 sortedset有序集合类型1.2.6 总结1.3 Redis高级应…

mysql在linux系统下重置root密码

mysql在linux系统下重置root密码 登录服务器时候mysql密码忘记了,没办法只能重置,找了一圈,把行之有效的方法介绍在这里。 错误展示: 我还以为yes就可以了呢,这是不行的意思。 关掉mysql服务 sudo systemctl stop …

百度、谷歌、必应收录个人博客网站

主要是给各个搜索引擎提交你的sitemap文件,让别人能搜到你博客的内容。 主题使用的Butterfly。 生成sitemap 安装自动生成sitemap插件。 npm install hexo-generator-sitemap --save npm install hexo-generator-baidu-sitemap --save在站点配置文件_config.yml…

Redhat 安装 docker 网络连接超时问题

目录 添加阿里云的Docker CE仓库 更新YUM缓存 安装 Docker Engine 启动并设置Docker自启动 验证 Docker 安装 [userlocalhost ~]$ sudo yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo 正在更新 Subscription Management 软件仓库…

PHP中的运算符与表达式:深入解析与实战应用

目录 一、基础概念 1.1 运算符的定义 1.2 表达式的定义 二、PHP运算符的分类 2.1 算术运算符 2.2 赋值运算符 2.3 比较运算符 2.4 逻辑运算符 2.5 位运算符 2.6 字符串运算符 2.7 错误控制运算符 三、表达式的优先级与结合性 3.1 优先级 3.2 结合性 四、实战应…

挑战全网最清晰解决文本文件乱码方案

标题 文本文件出现乱码之全网最清晰解决方案乱码出现的原因解决方案第一步:获取文件的原始编码格式。第二步,获取当前系统的格式第三步,将文件的内容以当前系统编码格式进行译码并且输出到新的文件中第四步,删除原文件&#xff0c…

【SOLID原则前端中的应用】接口隔离原则(Interface Segregation Principle,ISP)- vue3示例

接口隔离原则(Interface Segregation Principle,ISP)在Vue 3中的应用 接口隔离原则(Interface Segregation Principle,ISP)规定,客户端不应该被迫依赖于它不使用的方法。 换句话说,…