解析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接口;
③定义计算机Computer类
powerOn()开机,开机前需要加载所有的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();
}
}