JAVA系列 小白入门参考资料 接口

news2024/11/19 12:40:07

目录

接口

接口的概念

语法 

接口使用 

接口实现用例 

接口特性  

实现多个接口和实现用例

接口间的继承 


接口

接口的概念

在现实生活中,接口的例子比比皆是,比如:笔记本上的 USB 口,电源插座等。
电脑的 USB 口上,可以插: U 盘、鼠标、键盘 ... 所有符合 USB 协议的设备
电源插座插孔上,可以插:电脑、电视机、电饭煲 ... 所有符合规范的设备
通过上述例子可以看出: 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用
Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。 

语法 

接口在语法上和类相似 

public interface 接口名称 {

......

}

提示:   创建接口时, 接口的命名一般以大写字母 I 开头 

接口使用 

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

public class 类名称 implements 接口名称 {

...

}

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


接口实现用例 

以笔记本电脑使用 USB 鼠标、 USB 键盘为例

USB接口        笔记本类        鼠标类        键盘类

//USB接口
public interface USB {
    //方法,打开设备,关闭设备
    void openEquipment();
    void stopEquipment();
}

//定义鼠标类,使用接口
class Mouse implements USB {

    //使用接口,就要重写USB接口的抽象方法
    @Override
    public void openEquipment() {
        System.out.println("使用鼠标");
    }

    //自定义一个鼠标点击的功能
    public void click(){
        System.out.println("鼠标点击");
    }

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

//定义键盘类,使用接口
class Keyboard implements USB{

    @Override
    public void openEquipment() {
        System.out.println("使用键盘");
    }

    //自定义一个键盘输入的方法
    public void inPut() {
        System.out.println("键盘输入");
    }

    @Override
    public void stopEquipment() {
        System.out.println("关闭键盘");
    }
}
//定义电脑类,使用设备
class Computer{
        public void powerOn(){
            System.out.println("打开电源");
        }

        public void useEquipment(USB usb){
            //这里使用USB usb的原因是:为了传参并发生向上转型

            usb.openEquipment();//这里会发生动态绑定

            //这里,我们调用了使用设备的方法,但我们有鼠标和键盘,他们都要各自特有的方法click和inPut
            //但usb是接口类型,直接用usb去调用他们的特有方法,不可行

            //区分 引用的是谁的对象
            if(usb instanceof Mouse){
                Mouse mouse = (Mouse) usb;
                mouse.click();
            }else if(usb instanceof Keyboard){
                Keyboard keyboard = (Keyboard) usb;
                keyboard.inPut();
            }

            usb.stopEquipment();

        }

        public void powerOff(){
            System.out.println("关闭电源");
        }
        
}
class Test{
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.powerOn();
        System.out.println();
        computer.useEquipment(new Keyboard());
        System.out.println();
        computer.useEquipment(new Mouse());
        System.out.println();
        computer.powerOff();

    }
}


接口特性  

  1. 接口类型是一种引用类型,不能直接 new 接口的对象
  2. 接口中的每一个方法都是默认被 public private 修饰
  3. 接口中的方法不能在接口中实现(因为抽象方法不能有具体的实现),只能由实现接口的类来实现
  4. 重写接口中的方法时,不能使用默认的访问权限(因为接口的方法默认是public)
  5. 接口中可以拥有变量,但接口中的变量会默认被public static final 修饰
  6. 接口中不能有静态代码块和构造方法
  7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
  8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类

实现多个接口和实现用例

Java 中,类和类之间是单继承的,一个类只能有一个父类,即 Java 中不支持多继承 ,但是 一个类可以实现多个接
下面通过类来表示一组动物
创一个动物类
//动物类
class Animals{
    private String name;

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

创几个接口 

//吃 接口
interface EAT{
    void eat();
}

//跑 接口
interface RUN{
    void run();
}

//飞 接口
interface FLY{
    void fly();
}

//游泳 接口
interface SWIM{
    void swim();
}

创几个具体的动物类 

小狗,可以吃和跑 

class Dog extends Animals implements EAT,RUN{

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

    @Override
    public void eat() {
        System.out.println(this.name + "在吃");
    }

    @Override
    public void run() {
        System.out.println(this.name + "在跑");
    }
}

小鱼,可以吃和游 

class Fish extends Animals implements EAT,SWIM{

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

    @Override
    public void eat() {
        System.out.println(this.name + "在吃");
    }

    @Override
    public void swim() {
        System.out.println(this.name + "在游");
    }
}

小鸭子,可以吃,飞,跑和游

class Duck extends Animals implements EAT,RUN,FLY,SWIM{

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

    @Override
    public void eat() {
        System.out.println(this.name + "在吃");
    }

    @Override
    public void run() {
        System.out.println(this.name + "在跑");
    }

    @Override
    public void fly() {
        System.out.println(this.name + "在飞");
    }

    @Override
    public void swim() {
        
    }
}

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

继承表达的含义是 is - a 语义, 而接口表达的含义是 具有 xxx 特性 

以下是完整代码和执行结果 

class Animals{
    public String name;

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

//吃 接口
interface EAT{
    void eat();
}

//跑 接口
interface RUN{
    void run();
}

//飞 接口
interface FLY{
    void fly();
}

//游泳 接口
interface SWIM{
    void swim();
}

class Dog extends Animals implements EAT,RUN{

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

    @Override
    public void eat() {
        System.out.println(this.name + "在吃");
    }

    @Override
    public void run() {
        System.out.println(this.name + "在跑");
    }
}

class Fish extends Animals implements EAT,SWIM{

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

    @Override
    public void eat() {
        System.out.println(this.name + "在吃");
    }

    @Override
    public void swim() {
        System.out.println(this.name + "在游");
    }
}

class Duck extends Animals implements EAT,RUN,FLY,SWIM{

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

    @Override
    public void eat() {
        System.out.println(this.name + "在吃");
    }

    @Override
    public void run() {
        System.out.println(this.name + "在跑");
    }

    @Override
    public void fly() {
        System.out.println(this.name + "在飞");
    }

    @Override
    public void swim() {

    }
}

public class Blog {
    public static void main(String[] args) {
        Dog dog = new Dog("小狗");
        dog.eat();
        dog.run();
        
        Fish fish = new Fish("小鱼");
        fish.eat();
        fish.swim();
        
        Duck duck = new Duck("小鸭子");
        duck.eat();
        duck.fly();
        duck.run();
        duck.swim();
    }

}


接口间的继承 

Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。
接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字
interface RUN{
    void run();
}

//游泳 接口
interface SWIM{
    void swim();
}

interface ICanDo extends RUN, SWIM {
}

class Frog implements ICanDo {
    ...
}

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

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

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

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

相关文章

初学python记录:力扣1235. 规划兼职工作

题目: 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。 给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime …

水仙花数问题

问题描述: 求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。 #in…

对链表进行插入排序(详细解析)

对链表进行插入排序(详解) 题目: 对链表进行插入排序 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素&a…

CUDA和显卡驱动

1.安装显卡驱动 https://www.nvidia.com/download/index.aspx?langen-us 由于我的显卡是RTX4060,因此先选择RTX40系列,然后选择RTX4060,进行安装 2.查看显卡对应的CUDA CUDA安装地址:https://developer.nvidia.com/cuda-toolk…

数据库(MySQL)—— 事务

数据库(MySQL)—— 事务 什么是事务事务操作未控制事务测试异常情况 控制事务一查看/设置事务提交方式:提交事务回滚事务 控制事务二开启事务提交事务回滚事务 并发事务问题脏读(Dirty Read)不可重复读(Non…

小红书流量机制解析

小红书流量机制解析 前言 大家好,我自2020年5月起,开始专注于小红书平台,帮助品牌商家在小红书上经营。在这段时间里,我深入研究了小红书的流量机制,并结合自己的实践经验,为大家带来了这份全网最硬核的小…

【面试经典 150 | 字典树】实现 Trie (前缀树)

文章目录 写在前面Tag题目来源解题思路方法一:前缀树 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回…

复旦微JFM7VX690计算后IO接口模块,用于雷达信号处理、数据处理等需要高速密集计算的应用场景

计算后IO接口模块 1 介绍 1.1 产品概述 计算后IO接口模块主要由复旦微JFM7VX690型FPGA、国产以太网收发器YT8521、国产BMC芯片GD32F450、国产CPLD芯片EF2L45BG256B、国产内存颗粒等主要芯片组成,采用标准6U VPX尺寸设计。 本计算后IO接口模块主要用于雷达信号处…

实习与就业|基于Springboot+vue的实习与就业管理系统(源码+数据库+文档)

实习与就业目录 基于Springbootvue的实习与就业管理系统 一、前言 二、系统设计 三、系统功能设计 管理员登录 就业管理 企业公告信息管理 企业公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主…

SDB2F5 首鼎1.2MHz 输入5V 输出28V 100mA升压DC-DC转换器

SDB2F5是一款固定频率,内部的软启动有很小脉冲电流可延长电池寿命。SDB2F5最低输入电压为2.5V,在输入电压为5V的时候可升压到28V 100mA。SDB2F5在轻负载时自动转成脉冲频率调制模式。SDB2F5有欠压锁定,限流和热过载保护。 特点: …

链舞算法谱---链表经典题剖析

前言:探究链表算法的奥秘,解锁编程新世界! 欢迎来到我的链表算法博客,这将是您深入了解链表算法,提升编程技能的绝佳机会。链表作为数据结构的重要成员之一,其动态性和灵活性在实现某些功能上发挥不可替代的…

深入理解 Java 并发:AbstractQueuedSynchronizer 源码分析

序言 在多线程编程中,同步机制是保障线程安全和协调线程之间操作顺序的重要手段。AQS 作为 Java 中同步机制的基础框架,为开发者提供了一个灵活且高效的同步工具。本文将通过对 AQS 源码的分析,解读 AQS 的核心实现原理,并深入探…

同步互斥问题模型

目录 一. 生产者-消费者问题二. 多生产者-多消费者问题三. 吸烟者问题四. 读者-写者问题五. 哲学家进餐问题 \quad 一. 生产者-消费者问题 \quad 问题分析 \quad 如何实现 \quad \quad V操作不会导致进程阻塞,因此两个v操作顺序可以交换。 \quad 二. 多生产者-多消费…

前端 -- 基础 表单标签 - 表单元素 < Select > < textarea >

在表单域中可以定义各种表单元素,这些表单元素就是允许用户在表单中输入或者选择的内容控件。 在之前,我们就讲过 表单元素 分了 三类来讲 : 1 input 输入表单元素 2 select 下拉表单元素 3 textarea 文本域元素 input 表单元素 我们…

AGI要闻:斯坦福李飞飞首次创业,瞄准“空间智能”;OpenAI下周发布搜索产品挑战谷歌;新的开源 AI 眼镜来了|钛媒体AGI | 最新快讯

多方消息证实,OpenAI将会在北京时间5月10日(周五)凌晨2点公布搜索引擎新产品消息。 斯坦福大学首位红杉讲席教授 李飞飞 通用人工智能(AGI)领域又公布了一系列重磅消息。 5月4日凌晨,据路透社&#xff0c…

宝塔怎么配置nginx

宝塔怎么配置nginx 1.找到nginx配置位置 2.修改nginx.conf文件 3.重启nginx

在视频中使用时间卷积和半监督训练进行三维人体姿态估计

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读:在视频中使用时间卷积和半监督训练进行三维人体姿态估计1、文献摘要2、提出方法2.1、时间扩张卷积模型2.2、半监督方法2.3、与传统…

Mac OS系统如何更新

用了好几年的Mac Book安装软件经常提示需要更高的系统版本,因此要升级系统版本,但是开始在系统设置里面找了一下没有找到升级的按钮,找了资料后才知道如何升级。有以下两种入口 一、App Store搜索MacOs,在出现的搜索结果中选择下载…

力扣例题(接雨水)

链接: . - 力扣(LeetCode) 题目描述: 思路: 判断一块地方是否可以接到雨水,只需要判断他是否有左右边界使他可以接到水 左右边界分别为此处左侧的最高点和右侧的最高点 同时此处可接雨水的高度为左右两…

离散数学之命题逻辑思维导图+大纲笔记(预习、期末复习,考研,)

大纲笔记: 命题逻辑的基本概念 命题与联结词 命题 命题是推理的基本单位 真命题,假命题 特征 陈述句 唯一的真值 是非真即假的陈述句 非命题 疑问句 祈使句 可真可假 悖论 模糊性 三个基本概念 复合命题 真值取决于原子命题的值和逻辑联结词 原子命题 逻…