接口(interface)的实现

2023-11-15

接口(interface)的实现

usb插槽就相当于现实中的接口。其实现实生活和编程相对应的,即程序就是事件。

1.java中的接口是怎么实现的呢?

接口就是给出一些没有实现的方法,到了某个类要使用的时候就去实现他

语法:

interface 接口名{

//属性

//方法 1.抽象方法  jdk8:之后 2.默认实现方法 3.静态方法

}
class 类名 implements 接口{

//自己属性

//自己方法

必须实现接口的抽象方法但抽象方法的abstract可以省略

}

小结:

jdk7.0:方法都是抽象方法

jdk8.0:有静态方法和默认方法

  1. 定义了一个接口,类似于规范
  2. 相机和手机分别实现这个接口,本质就是把接口的方法实现
  3. 通过接口来调用方法

代码演示:

1.先写一个统一实现的接口interface usbinterface

说明:接口也是一个特殊的类

public interface usbinterface { //接口
    //规定的接口的相关方法 且在jdk7中方法都是抽象方法
     public abstract void start();
    public abstract void stop();
}

2.再写两个类,Phone(手机)类和Camera(相机)类分别实现这个接口的抽象方法

Phone(手机)类:用implements关键词对应这个接口

public class Phone implements usbinterface {  //phon 这个类实现usb这个接口
    //phone这个类需要去实现这个接口的 规定和声明的方法

    @Override
    public void start() {
        System.out.println("手机开始工作!");
    }

    @Override
    public void stop() {
        System.out.println("手机停止工作!");
    }
}

Camera(相机)类:

public class Camera implements usbinterface {
    @Override
    public void start() {
        System.out.println("相机开始工作!");
    }

    @Override
    public void stop() {
        System.out.println("相机停止工作!");
    }
}

3.写一个Computer电脑类,参数为接口定义的方法,来调用接口中实现的了抽象方法、

public class Computer {
    //编写一个方法
    public void work(usbinterface usbinterface){ //定义接口
        usbinterface.start();
        usbinterface.stop();
    }
}

4.测试类

public class interface01 {
    public static void main(String[] args) {
        //创建手机,相机对象
        Camera camera = new Camera();
        Phone phone = new Phone();
        //创建计算机
        Computer computer = new Computer();
        computer.work(phone);//把手机接入到计算机
        System.out.println("========================");
        computer.work(camera);//把相机接入到计算机
    }

}

5.结果:

在这里插入图片描述

2.接口编程

测试案例2:

项目经理需要实现mysql和oracle的连接和关闭工作,定义了如下接口

public interface DBinterface { //项目经理

    public void connect();
    public void close();
}

需要两个程序员去实现它,然后自己就跑出喝奶茶了

实现mysql的程序员:

public class mysql implements DBinterface {
    @Override
    public void connect() {
        System.out.println("链接mysql!");
    }

    @Override
    public void close() {
        System.out.println("关闭mysql!");
    }
}

实oracle的程序员:

public class oracledb implements DBinterface {
    @Override
    public void connect() {
        System.out.println("连接oracle");
    }

    @Override
    public void close() {
        System.out.println("关闭oracle");
    }
}

测试类:

public class interface03 {
    public static void main(String[] args) {
        mysql mysql = new mysql();
        t(mysql);
        System.out.println("============");
        oracledb oracledb = new oracledb();
        t(oracledb);
    }
    public static void t(DBinterface db){
        db.connect();
        db.close();
    }
}

结果:
在这里插入图片描述

问题:

如果项目经理不去定义接口类的话,两个程序员就会自由发挥,分别写出不同的方法,这样测试的时候,就会存在代码的复杂和冗余,相反定义了接口类,程序员就必须遵从接口中的抽象方法,进行实现即可,测试的时候分别进行写对象调用就完事了。

3.接口的注意事项

事项一:
  • 接口是一种抽象的概念不能被实例化。
  • 接口中的方法都是public的,可以不用abstract修饰,可以省略abstract
  • 一个普通类实现接口,就必须将该接口的所有方法都实现
  • 抽象类实现接口,可以不使用接口方法
public class interface04 {
    public static void main(String[] args) {

    }
}
interface IA{
    void say(); //可以省略abstract
    void hi(); //修饰符 public protected 默认 private 这里的方法是public的
}
class cat implements IA{ //快捷键 ait+enter 实现所有抽象方法 不然会报错

    @Override
    public void say() {

    }

    @Override
    public void hi() {

    }
}
//抽象类
abstract class tiger implements IA{
    //可以不实现接口的方法
}
事项二
  1. 一个类可以实现多个接口
  2. 接口中的属性都是Final的,而且是public static final修饰符
  3. 接口中的属性的访问形式:接口名.属性名
  4. 接口不能继承其他的类,但是可以继承多个别的接口
  5. 接口的修饰符只能是Public和默认的,跟类的修饰符是一样的
public class interface05 {
    public static void main(String[] args) {
        System.out.println(IB.n1); //n1 为static
//        IB.n1 =1;
    }
}
interface IB{
    int n1 = 100;//public static final int n1  = 100;
    void h1();
}
interface IC{
    void say();
}
interface ID extends IB,IC{
    
}
class pig implements IB,IC{

    @Override
    public void h1() {

    }

    @Override
    public void say() {

    }
}

接口中的属性都是Final的,而且是public static final修饰符处理结果:

在这里插入图片描述

原码拉取地址:https://github.com/Ronronner859/Java/tree/master

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口(interface)的实现 的相关文章

随机推荐

  • go搭建服务器基础

    goweb应用工作原理 用于个人学习 客户端发送请求给多路复用器 多路复用器根据请求 gt 处理器处理器 gt 模型 gt 数据库 数据库找到相应的数据反馈给模型 模型将数据封装发给处理器 处理器给模板引擎然后生成模板 go里面有相应的ht
  • CUDA安装及环境配置——最新详细版

    确定安装版本 在安装之前呢 我们需要确定三件事 第一 查看显卡支持的最高CUDA的版本 以便下载对应的CUDA安装包 第二 查看对应CUDA对应的VS版本 以便下载并安装对应的VS版本 vs需要先安装 第三 确定CUDA版本对应的cuDNN
  • Forrester研究报告:Information Fabric——企业数据虚拟化(Part I、摘要翻译)

    Information Fabric 企业数据虚拟化Forrester研究报告EXECUTIVE SUMMARY总览Enterprises are facing the growing challenges of using dispara
  • 计算宽度_如何通过紫外可见漫反射光谱计算带隙/禁带宽度(图的绘制:tauc plot&KM法)...

    微信公众号试行乱序推送 为了不错过更新 请点击本页面最上方的 结构分析表征 进入公众号主页 点击右上角的三个小点点 在弹出的界面点击 设为星标 并在看完图文或视频后点击右下角的 在看 和 赞 本公众号以各类仪器的测试 分析教程 欢迎关注同名
  • 安装Windows时提示Windows无法安装到这个磁盘

    出现这种情况一般是因为安装程序的启动模式与目标磁盘的格式不一致导致 比如用UEFI启动时 目标安装盘是mbr 或用 Legacy启动时 目标安装磁盘是GPT分区 出现这种情况时 按shift F10可以打开命令提示符窗口 输入diskpar
  • ProFrom套EditableProTable如何进行表单验证

    import React useRef from react import Button from antd import BetaSchemaForm DrawerForm ProCard from ant design pro comp
  • 解决win10中无法打开CHM文件的方法

    CHM文件是非常常见的帮助文件格式 由于其便携性 很多语言的API会采用chm格式 win7 win8 1 win10系统 由于采用了UAC 致使原本在xp里浏览正常的chm文件出现空白而无法正常显示 解决方法 右键选择需要打开的文件 选择
  • SpringBoot中运行测试:java.lang.NullPointerException

    问题展示 SpringBoot中运行测试类报 java lang NullPointerException 问题描述 提示 这里描述项目中遇到的问题 在SpingBoot中当我们在它原有的测试基类BaseSpringBootTest jav
  • 7年经验之谈 —— 如何高效的开展app的性能测试?

    APP性能测试是什么 从网上查了一下 貌似也没什么特别的定义 我这边根据自己的经验给出一个自己的定义 如有巧合纯属雷同 客户端性能测试就是 从业务和用户的角度出发 设计合理且有效的性能测试场景 制定各性能场景下的客户端性能指标 内存 CPU
  • 微信小程序服务器域名怎么填,微信小程序合法域名配置方法

    在微信小程序的开发过程中 当需要请求第三方网站数据时 各种教程就直接说调用wx request接口即可 但是当初学者自己用的时候就会出现问题 比如我们这里请求聚合数据的API 里边有不少免费的数据申请就可以使用 调用邮编查询的接口 getP
  • Mybatis嵌套查询与嵌套结果

    一对多关系 一是用户 多是订单 实体类User public class User private Integer id private String name private Integer age private List
  • 后台获取前端提交数据的GET、POST方法遇到的问题

    在写代码的时候 总发现前端数据获取不到 最后发现了问题是因为get和post要一起出现 缺一不可 protected void doGet HttpServletRequest request HttpServletResponse res
  • JavaWeb之添加数据,显示到页面

    需求 从jsp页面添加一条记录到数据库 且显示到界面 分析 创建jsp页面 创建EmailServlet gt addEmail方法 设置请求编码 获取所有parameter的值 封装对象 调用addEmail方法 重定向到email sh
  • 游戏开发unity杂项知识系列:SetActive使用注意

    static public void SetActive GameObject go bool state if go null return if go activeSelf state go SetActive state 项目中类似上
  • JSP语法:setProperty

    JSP语法 13 setProperty 时间 2009 03 21 20 37 来源 作者 CSDN IE QQ 百度 Google POCO 新浪 365Key 天极 和讯 博拉 Live 奇客 收客 饭否 叽歪
  • 互联网未来发展方向

    都知道马云带来了互联网以及互联网的高潮 随着国家推动一带一路经济带 以及国内互联网大局的发展 很明显未来是互联网的天下 而互联网将来会怎样哪 第一 网购或者终端购物成为主流 随着经济发展 社会文明进步 智能制造 智能社会越来越凸显 智能手机
  • Python和C语言哪个难?零基础学哪个好?

    Python和C语言哪个难 零基础学哪个好 Python上手简单有交互性强的开发环境 还有众多的第三方库 学习起来会比C C 容易的多 C过于底层强在内存操作 功能实现起来却十分复杂并不适合新手作为上手语言 Python和C语言各有各的优势
  • Elastic Search 学习笔记

    来自尚硅谷 ES 教程 背景知识 从MySQL 到 ES 这一小节是我的一点点理解 如果有不对的话 欢迎指正 ES 是一个开源的高扩展的分布式全文搜索引擎 这样讲似乎还是有点抽象 那我们用一个更加熟悉的东西 MySQL来辅助理解 既然是搜索
  • 程序员技术面常用知识点

    转自 http blog csdn net qq 15437629 article details 52388685 在这里只做备份 计算机网络 TCP IP 模型 TCP IP协议集的分层实施 为什么要给网络划分层次 1 各层之间相对独立
  • 接口(interface)的实现

    接口 interface 的实现 usb插槽就相当于现实中的接口 其实现实生活和编程相对应的 即程序就是事件 1 java中的接口是怎么实现的呢 接口就是给出一些没有实现的方法 到了某个类要使用的时候就去实现他 语法 interface 接