解析java中的接口

解析java中的接口

1 含义

接口就是一组规范,定义的是一组规则。
其中定义接口的关键字为interface
实现接口的关键字为implements
接口是一种引用数据类型,可以粗略的理解为特殊的抽象类(接口中,方法都是抽象方法,属性全是常量)

2 为什么要用

为了保证不同的类执行相同的标准。例如: USB接口就是一个标准,这个标准会被所有需要用到USB的接口的东西执行,电脑的USB接口和家用电器的USB接口执行的标准是一样的,但是这个USB和电脑之间是不存在父子关系的,所以我们就引入了接口,来实现能不能的的功能。
也是为了弥补java单继承的缺点而引入的概念

3 如何用接口

3.1 语法

3.1.1 定义接口的语法
权限修饰符(public|默认) interface 接口名{
   //常量
    public static final 常量数据类型 常量名(全大写)=常量值;
    //抽象方法
    public abstract 方法返回值类型 方法名(形参列表);
}
3.1.2 实现接口的语法
权限修饰符列表 class 类名 implements 接口名1,接口名2{
    
}
3.1.3 既有继承又实现了接口
权限修饰符列表 class 类名 extends 父类 implements 接口名,接口名2{
    //规则是先继承后实现接口
}
3.1.4 接口与接口之间的语法(继承)
权限修饰符(public|默认) interface 接口名1 extends 接口名2,接口名3{
   //接口与接口之间可以多继承,一定程度上可以弥补java单继承的缺陷
    //注意:接口与接口之间是不能实现的
}
3.1.5 对接口中的常量和方法的简写
public static final 常量数据类型 常量名=常量值;
可以简化成 常量数据类型 常量名=常量值;
public abstract 方法返回值类型 方法名(形参列表);
可以简化成 方法返回值类型 方法名(形参列表);
//其本质是java在运行时,会自动给你加上前面的那一堆前缀

3.2 本质

接口本质就是实现能不能的问题

比如有子弹类和风筝类,他们都有飞这个功能,显然把飞作为他们俩的父类是不合理的,应该是子弹类或风筝类实现了飞这个功能,这就是典型的接口关系

其实,接口就是把共性抽象出来,但是又不符合建立父子关系的一种情况而已。

3.3 题目

3.3.1 题目内容
模拟USB接口的功能
我们在使用计算机的时候经常会用到USB接口,鼠标、键盘等都是带USB接口的设备,我们只需要将鼠标、键盘插入到计算机的USB接口中就能正常使用这些带USB接口的外设。
通过JAVA程序的面向接口编程的设计思想,模拟计算机使用USB接口驱动鼠标和键盘的过程。
要求:
① 定义USB接口,接口中有turnOn()启动USB设备的方法,和turnOff()关闭设备的方法;
②定义Mouse鼠标、KeyBoard键盘、MicroPhone麦克风类实现USB接口;
③定义计算机ComputerpowerOn()开机,开机前需要加载所有的USB设备;
powerOff()关机,关机前需要弹出所有的USB设备。
3.3.1 示例代码

USB接口

package Work2;
public interface USB {
    void turnOn();
    void turnOff();
}

Mouse类

package Work2;

public class Mouse implements USB{
    private String name;

    public Mouse() {
    }

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

    @Override
    public void turnOn() {
        System.out.println("名字为:"+((Mouse) this).name+"的鼠标加载成功!!!!");
    }

    @Override
    public void turnOff() {
        System.out.println("名字为:"+((Mouse) this).name+"的鼠标弹出成功!!!!");
    }
}

KeyBoard类

package Work2;

public class KeyBoard implements USB{
    private String name;

    public KeyBoard() {
    }

    public KeyBoard(String name) {
        this.name = name;
    }
    @Override
    public void turnOn() {
        System.out.println("名字为:"+((KeyBoard) this).name+"的键盘加载成功!!!!");
    }

    @Override
    public void turnOff() {
        System.out.println("名字为:"+((KeyBoard) this).name+"的键盘弹出成功!!!!");
    }
}

MicroPhone类

package Work2;

public class MicroPhone implements USB{
    private String name;

    public MicroPhone() {
    }

    public MicroPhone(String name) {
        this.name = name;
    }
    @Override
    public  void turnOn() {
        System.out.println("名字为:"+((MicroPhone) this).name+"的麦克风加载成功!!!!");
    }

    @Override
    public void turnOff() {
        System.out.println("名字为:"+((MicroPhone) this).name+"的麦克风弹出成功!!!!");
    }
}

Conmputer类

package Work2;

import java.util.Scanner;

public class Computer {
    private USB mouse;
    private USB keyBoard;
    private USB microPhone;
    private static Scanner scanner=new Scanner(System.in);
    {
        System.out.println("请输入鼠标的名字");
        mouse=new Mouse(scanner.next());
        System.out.println("请输入键盘的名字");
        keyBoard=new KeyBoard(scanner.next());
        System.out.println("请输入麦克风的名字");
        microPhone=new MicroPhone(scanner.next());
    }

    //开机
    public void powerOn(){
        mouse.turnOn();
        keyBoard.turnOn();
        microPhone.turnOn();
        System.out.println("电脑启动成功");
    }
    //关机
    public void powerOff(){
        mouse.turnOff();
        keyBoard.turnOff();
        microPhone.turnOff();
        System.out.println("电脑关闭成功");
    }
}

TestComputer类

package Work2;

public class TestComputer {
    public static  void main(String[] args) {
        Computer c=new Computer();
        System.out.println("测试电脑开机");
        c.powerOn();
        System.out.println("测试电脑关机");
        c.powerOff();
    }
}

3.3.2 示例代码运行截图

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值