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

目录

接口

接口的概念

语法 

接口使用 

接口实现用例 

接口特性  

实现多个接口和实现用例

接口间的继承 


接口

接口的概念

在现实生活中,接口的例子比比皆是,比如:笔记本上的 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 方法.

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

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

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

相关文章

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

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

【错题集-编程题】十字爆破(预处理 + 模拟)

牛客对于题目链接:十字爆破 (nowcoder.com) 一、分析题目 暴力模拟会超时。 预处理,先把每一行以及每一列的和存起来。 模拟即可,但是由于数据量过⼤,我们可以提前把每⼀⾏以及每⼀列的和存起来,⽅便统计总和。 二、代…

应用分层和企业规范

目录 一、应用分层 1、介绍 (1)为什么需要应用分层? (2)如何分层?(三层架构) MVC 和 三层架构的区别和联系 高内聚: 低耦合: 2、代码重构 controlle…

Sqlserver批量迁移Job

因为切换物理机,需要把数据库的作业从A机器迁移到B机器,数据库整体备份还原就可以了,数据库上的作业不会跟着带过去,需要手动创建,作业数量太多,逐一创建太浪费时间,Microsoft SQL Server Manag…

SpringBoot+Vue项目企业客户管理系统

一、前言介绍 本文主要论述了如何使用JAVA语言开发一个企业客户管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述企业客户管理系统的当前背景以及系统开…

扩展学习|国内外用户画像相关进展一览

文献来源:徐芳,应洁茹.国内外用户画像研究综述[J].图书馆学研究,2020(12):7-16.DOI:10.15941/j.cnki.issn1001-0424.2020.12.002. 一、用户画像的概念 用户画像概念一经提出,便被广泛应用到精准营销等领域。后来,作为一种描绘用户特征、表达用户诉求的有效工具,用户…

karpathy Let‘s build GPT

1 introduction 按照karpathy的教程,一步步的完成transformer的构建,并在这个过程中,加深对transformer设计的理解。 karpathy推荐在进行网络设计的过程中,同时利用jupyter notebook进行快速测试和python进行主要的网络的构建。 …

前端页面平滑过渡解决方案

一、问题产生 在使用图片作为页面背景时,无法使用transtion进行平滑过渡,直接切换背景又会降低使用体验。 二、解决方式 使用clip-path对背景图片裁剪配合transtion实现平滑过渡的效果 三、效果展示 网址:ljynet.com 四、实现方式 tem…

图像特征点检测

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

练习题(2024/5/3)

1对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: 树中…

前端工程化04-VsCode插件设置总结(持续更)

1、输出语句log设置 log输出、平常你输出log,还必须得打一个console然后再.log()非常不方便,当然我们可以直接输入一个log,但是提示有两个,我们还得上下选择 所以我们直接采用插件的提示 一个clg就可以了 2、括号包裹提示 找到VsCode的settings.js文…

考研入门55问---基础知识篇

考研入门55问---基础知识篇 01 >什么是研究生入学考试? 研究生是指大专和本科之后的深造课程。以研究生为最高学历, 研究生毕业后,也可称研究生,含义为研究生学历的人。在中国大陆地区,普通民众一般也将硕士毕业生称…

微图乐 多种装B截图一键制作工具(仅供娱乐交流)

软件介绍 采用exe进程交互通信。全新UI界面,让界面更加清爽简约。支持zfb、VX、TX、Yin行、Dai款、游戏等图片生成,一键超清原图复制到剪辑板,分享给好友。适用于提高商家信誉度,产品销售额度。装逼娱乐,用微图乐。图…

InfiniFlow 創始人兼CEO張穎峰確認出席“邊緣智能2024 - AI開發者峰會”

隨著AI技術的迅猛發展,全球正逐步進入邊緣計算智能化與分布式AI深度融合的新時代,共同書寫著分布式智能創新應用的壯麗篇章。邊緣智能,作為融合邊緣計算和智能技術的新興領域,正逐漸成為推動AI發展的關鍵力量。借助分布式和去中心…

扫雷实现详解【递归展开+首次必展开+标记雷+取消标记雷】

扫雷 一.扫雷设计思路二.扫雷代码逐步实现1.创建游戏菜单2.初始化棋盘3.打印棋盘4.随机布置雷5.统计周围雷的个数6.递归展开棋盘7.标记雷8.删除雷的标记9.保证第一次排雷的安全性棋盘必定展开10.排查雷11.判断输赢 三.扫雷总代码四.截图 一.扫雷设计思路 1.创建游戏菜单。  2.…

使用机器学习确定文本的编程语言

导入必要的库 norman Python 语句&#xff1a;import <span style"color:#000000"><span style"background-color:#fbedbb"><span style"color:#0000ff">import</span> pandas <span style"color:#0000ff&quo…

Postman的一些使用技巧

Postman 是一个流行的 API 开发工具&#xff0c;用于设计、开发、测试、发布和监控 API。在现代web开发中使用非常广泛。后端开发必备而且必会的工具。 目录 1.配置环境变量 2.动态变量 3.脚本 4.测试 5.模拟 6.监控 7.集合运行器 8.响应保存 9.请求历史 10.同步请求…

基于springboot+vue+Mysql的影城管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

brpc profiler

cpu profiler cpu profiler | bRPC MacOS的额外配置 在MacOS下&#xff0c;gperftools中的perl pprof脚本无法将函数地址转变成函数名&#xff0c;解决办法是&#xff1a; 安装standalone pprof&#xff0c;并把下载的pprof二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PA…

现代循环神经网络(GRU、LSTM)(Pytorch 14)

一 简介 前一章中我们介绍了循环神经网络的基础知识&#xff0c;这种网络 可以更好地处理序列数据。我们在文本数据上实现 了基于循环神经网络的语言模型&#xff0c;但是对于当今各种各样的序列学习问题&#xff0c;这些技术可能并不够用。 例如&#xff0c;循环神经网络在…