14 接口

简介: 14 接口

配套视频教程


本文B站配套视频教程


实现防盗门的功能


第一种方案

  • 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能
  • 将门和锁分别定义为抽象类

防盗门可以继承门的同时又继承锁吗?

第二种方案

  • 将门定义为抽象类,锁定义为接口
  • 防盗门继承门,实现锁的接口

接口

public interface MyInterface {
    public void foo();
    //其他方法
}

必须知道的接口特性

  • 接口不可以被实例化
  • 实现类必须实现接口的所有方法
  • 实现类可以实现多个接口
  • 接口中的变量都是静态常量


用程序描述USB接口


image.png



USB接口本身没有实现任何功能

USB接口规定了数据传输的要求

USB接口可以被多种USB设备实现

接口是一种标准,一种协议,一种规范,规定了2个方面。usb接口为例,

规定了usb插槽和usb插头2方面,插槽不按标准生产,插头插不进去;插头不按标准生产,插不进插槽。

接口interface,定义了一系列的方法,同样规定了2个方面,其实是一种约束

1.实现接口的类(比如DepenseDoor类),必须按方法声明(方法名,方法参数,方法返回值)实现这些方法;

2.使用实现了接口类的那些类(比如测试类TestInterface),

必须按接口中的方法声明(方法名,方法参数,方法返回值)去使用这些方法;

  • 编写USB接口
    根据需求设计方法
  • 实现USB接口
    实现所有方法
  • 使用USB接口
    用多态的方式使用

1定义usb接口

public interface UsbInterface {
    /**
     * USB接口提供服务。
     */
    void service();
}

2 实现接口

public class UDisk implements UsbInterface {
    public void service() {
        System.out.println("连接USB口,开始传输数据。");
    }
}

使用接口

UsbInterface uDisk = new UDisk();
uDisk.service();

接口表示一种能力(体现在接口的方法上 )

做这项工作需要一个程序员

编程是一种“能力”,不关心具体是谁(具体的实现类是谁)

面向接口编程

设计程序时

关心实现类有何能力,而不关心实现细节

面向接口的约定而不考虑接口的具体实现

实例

某软件公司,需要2个能编程的“人”开发一个刚接到的项目

//编程接口
public interface IProgram {
    public void program();
}

public class Person {
}

//程序员
public class Programmer extends Person implements IProgram {
    @Override
    public void program() {
        System.out.println("我编编编");
    }
}

//机器人类
public class Robot implements IProgram{
    @Override
    public void program() {
        System.out.println("我编编编,但是我不累");
    }
}

//软件公司类
public class SoftwareCommany {
    public static void main(String[] args) {
        //需要2个能编程的“人”开发一个刚接到的项目
        IProgram[] iPrograms = new IProgram[2];//数组里放得是2个能编程的“人”
        iPrograms[0] = new Robot();
        iPrograms[1] = new Programmer();//只要是实现了接口的类,都可以看成是接口类型
        for(int i = 0; i < iPrograms.length; i++)
        {
            iPrograms[i].program();//让他们编程序
        }
    }
}

一个更复杂的实例

对象自定义属性排序实现

比较接口

public interface MyCompareable {
    public int CompareTo(Object obj);
}

一个汽车类实现了MyCompareable 接口

public class Car  implements MyCompareable{
    int id;
    String name;
    @Override
    public String toString() {
        return "Car{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
    public Car(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Override
    public int CompareTo(Object obj) {
        Car car = (Car)obj;
        return this.id - car.id;
    }
}

排序类

public class BubbleSort {
    public static void endSort(Car[] arr2) {
        System.out.println("原序列");
        System.out.println(Arrays.toString(arr2));
        //两次for循环解决
        for(int i = 0; i < arr2.length-1; i++){
            for(int j=0; j < arr2.length-1-i;j++){
                if(arr2[j].CompareTo(arr2[j+1])>0){
                    Car temp = arr2[j];
                    arr2[j] = arr2[j+1];
                    arr2[j+1] = temp;
                }
            }
        }
        System.out.println();
        System.out.println("两层循环排序");
        System.out.println(Arrays.toString(arr2));
    }
}

主方法

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Car[] cars = new Car[3];
        cars[0] = new Car(11,"baima");
        cars[1] = new Car(15,"benci");
        cars[2] = new Car(13,"audi");
        BubbleSort.endSort(cars);
    }
}


目录
相关文章
|
缓存 网络协议 前端开发
【前端面试知识点】- 1. http&https
http: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。
【前端面试知识点】- 1. http&https
|
10月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
185 4
|
11月前
|
数据挖掘 UED
ClkLog埋点分析系统支持漏斗分析
漏斗分析是基于事件的一种分析模型。 漏斗分析主要是对一个多步骤的场景进行的每一步的转化数据分析。可以理解为是从顶部(广泛数据)到底部(目标数据)逐步筛选和转化分析的过程。
ClkLog埋点分析系统支持漏斗分析
|
运维 监控 安全
构建高效自动化运维体系的五大关键步骤
在当今快速发展的IT环境中,自动化已经成为提高运维效率、减少人为错误和响应快速变化的关键。本文将深入探讨构建一个高效自动化运维体系的核心步骤,包括工具选择、流程设计、系统集成、安全策略以及持续改进。通过这些步骤,企业可以确保其运维团队能够更加高效地管理日常任务,同时保持系统的稳定性和安全性。
|
10月前
|
人工智能 Oracle 安全
中大型企业CRM系统十佳:2024年最佳选择
中大型企业因业务复杂、客户需求多样,对CRM系统有更高要求。本文推荐十大优秀CRM系统:销售易、Salesforce、Oracle、微软Dynamics 365、Zoho CRM、用友CRM、智邦国际、红圈销售、悟空CRM和神州云动,这些系统功能强大、定制性强,能有效提升企业管理效率。
|
安全 网络安全 API
2024年海外十大数据泄露事件
2024年,全球网络安全面临严峻挑战,多个行业遭受重大数据泄露事件。UnitedHealth Group数百万患者数据遭窃;AT&T几乎全网客户记录外泄;Trello 1500万用户信息泄露;France Travail 4300万人受影响;MITRE因VPN漏洞受损;Dropbox客户信息外流;BBC Pension Scheme逾2.5万名成员信息暴露;TeamViewer员工目录遭入侵;Advance Auto Parts 230万人信息被盗;Nissan Oceania也未能幸免。这些事件强调了强化数据保护及网络安全策略的重要性。
408 3
2024年海外十大数据泄露事件
|
算法 数据挖掘 计算机视觉
刷力扣必备ImageMagick: 强大的图像处理套件
刷力扣必备ImageMagick: 强大的图像处理套件
刷力扣必备ImageMagick: 强大的图像处理套件
|
存储 弹性计算 Linux
云服务器 ECS产品使用问题之如何实现计划任务定时备份和重启
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
人工智能 机器人 数据库
字节推出「Coze扣子」AI Bot 开发平台,无需编程,让 Chatbot 搭建更快捷、低门槛!
字节推出「Coze扣子」AI Bot 开发平台,无需编程,让 Chatbot 搭建更快捷、低门槛!
583 0
|
Prometheus Kubernetes Cloud Native
Flagger(应用自动发布)介绍和原理剖析
## 简介 [Flagger](https://github.com/weaveworks/flagger)是一个能使运行在k8s体系上的应用发布流程全自动(无人参与)的工具, 它能减少发布的人为关注时间, 并且在发布过程中能自动识别一些风险(例如:RT,成功率,自定义metrics)并回滚. ## 主要特性 ![features](https://intranetproxy.ali
4805 0