接口
生活常见接口:
USB Type-C UBS-C 雷电 RJ45 HDMI VPA PCI-E Lighting 3.5MM M.2 SATA
接口有什么作用?
USB
U盘 移动硬盘 鼠标 键盘 耳机 网卡 声卡 摄像头…
拓展功能,链接外部设备
USB接口限制了什么?
制定规范,制定协议
符合USB接口规范,USB接口协议才可以连接
java中的接口
关键字:
interface 接口
UI Design User Interface
格式:
interface 接口名 {
成员变量
成员方法
}
要求:
1. 接口名要求符合命名规范,大驼峰命名法!!!见名知意
2. 成员变量【缺省属性】 public static final 定义时必须初始化
3. 成员方法【缺省属性】 public abstract 方法没有方法体
package com.qfedu.b_interface;
/**
* 自定义接口,接口名A
*
* 两个问题:
* 1. USB接口,尺寸固定之后,有人改吗?
* 没有人修改
* 2. USB接口做什么,是接口决定?还是设备决定?
* 设备
* 思考:
* 静态?
* abstract?
* final?
* 继承?
* @author Anonymous
*
*/
interface A {
/* 成员变量
* The blank final field num may not have been initialized
*
* 通过Outline工具,发现当前成员变量存在public static final修饰,但是代码并没有
* 显式当前修饰内容
* 【缺省属性】 public static final
*/
int num = 10;
/*
* 成员方法
* Abstract methods do not specify a body
*
* 错误提示,当前代码中test方法是一个abstract修饰方法,并且在Outline发现方法
* 存在一个A标记,证明为abstract,但是代码中并没有显式展示abstract修饰
* 【缺省属性】public abstract
*/
void test();
}
public class Demo1 {
}
java中类遵从接口的格式写法
/**
* B类通过关键字 implements 遵从接口A,要求是实现接口A中的所有
* 缺省属性为public abstract修饰的方法。
* @author Anonymous
*
*/
class B implements A {
@Override
public void test() {
System.out.println("B类遵从接口A,实现test方法");
}
}
一个类可遵从多个接口 只需在implements后面隔开写接口名即可
接口也可以继承接口
package com.qfedu.b_interface;
/*
* USB1.0协议
*/
interface Usb1_0 {
void usb1_0();
}
/*
* USB2.0协议
*/
interface Usb2_0 {
void usb2_0();
}
/*
* USB3.0协议
*/
interface Usb3_0 {
void usb3_0();
}
/**
* 小米电脑上的USB接口需要兼容USB1.0 USB2.0 USB3.0 协议
*
* 接口可以使用extends完成继承,并且允许多继承存在
* @author Anonymous
*
*/
interface UsbMi extends Usb1_0, Usb2_0, Usb3_0 {
void usbMi();
}
class MiGameComputer implements UsbMi {
@Override
public void usb1_0() {
System.out.println("兼容USB1.0");
}
@Override
public void usb2_0() {
System.out.println("兼容USB2.0");
}
@Override
public void usb3_0() {
System.out.println("兼容USB3.0");
}
@Override
public void usbMi() {
System.out.println("小米USB接口");
}
}
public class Demo3 {
public static void main(String[] args) {
new MiGameComputer().usb1_0();
new MiGameComputer().usb2_0();
new MiGameComputer().usb3_0();
new MiGameComputer().usbMi();
}
}
abstract :
以abstract修饰的方法不能有方法体,但是修饰后的类遵从接口不必重写方法
default :
JDK1.8 更新特征
default关键字可以在接口中使用,用于修饰方法,使用default关键字修饰的方法在接口中是允许有方法体
【默认方法】【非强制重写方法】
多态:
- 一个方法需要的参数是父类,传入实际参数是父类对象本身,或者其子类对象都是OK的!
- 一个方法返回值类型是父类,实际返回的数据时父类对象本身,或者其子类对象也是OK的!
- 引用数据类型之间的强制类型转换时允许使用,但是要求明确真实数据类型是一致的,不然会导致异常出现ClassCastException
1. 父类的引用指向子类的对象
2. 或者接口的引用指向遵从接口的类对象
这就是多态