1.什么是接口?
1.1从生活中理解:
生活中常用的接口有USB、Type-C、HDMI等等。这些接口就是做一些事情的一种规范,但具体做什么事,需要由遵从接口的实现类来决定。
如USB接口,可以做很多事,但具体做什么需要由连接USB接口的设备类型决定,如鼠标类用来控制光标、键盘类用来输入、U盘类用来存储数据等等。
1.2java中的接口
类似于生活中的接口,创建新接口并通过自定义接口里的方法,从而使该接口的不同实现类对象完成不同的功能。因此可以说接口就是一系列abstract方法的集合。接口没有对象,且本身没有任何实现。接口不能new对象,但可以new一个引用类对象,下边会讲到。
2.接口的使用
2.1格式:
创建接口:
interface 接口名 {
成员变量//缺省属性:public static final
成员方法//缺省属性:public abstract
//方法中也可用default关键字修饰方法,拥有方法体,表示默认处理方法,是非强制实现方法
}
实现类【遵从】接口:
class 类名 implements 接口 {
//非abstract类须将接口中的方法全部实现
}
2.2接口中的继承
接口和接口之间,允许使用extends关键字继承,并且与类继承的唯一性不同,接口继承允许一个接口同时继承多个接口。
理解:协议的向下兼容
interface A extends B,C
//创建同时继承接口B、C的接口A
案例:
interface USB {
//所有USB设备必须实现的方法
void connect;
}
//接口的实现类(鼠标类)
class Mouse implements USB {
@Override
public void connect(){
system.out.println("鼠标连接USB接口");
}
}
//接口的实现类对象
class Logi extends Mouse {
@Override
public void connect(){
system.out.println("罗技鼠标已连接");
}
}
2.3接口中的多态
多态:
接口的引用指向遵从接口的实现类对象。或者说父类的引用指向子类的对象。
作用:
1.拓宽方法的参数范围。如:方法参数为某类型,则该类本身类对象或者其子类的类对象都可作为参数。
2.拓宽方法的返回值范围。
3.简化代码开发放,提高开发效率,整合数据类型
2.4接口中的匿名内部类
2.4.1理解
当重在使用接口中的方法,而类过于繁杂、不重要的时候,可直接通过接口new一个引用,该引用指向的是该接口的实现类对象,可通过该引用调用方法。
2.4.2使用格式
格式:
(1)
//用A接口new一个引用a,指向A的实现类对象
A a = new A() {
//大括号里可认为是类的本身
@Override
public void test() {
system.out.println("匿名内部类的对象赋值给接口的引用");
}
}
a.test();
(2)直接用匿名类对象调用实现的方法
new A() {
@Override
public void test() {
System.out.println("匿名内部类的匿名对象直接调用方法");
}
}.test();
(3)匿名内部类的对象直接作为方法的参数
testInterface(new A() {
@Override
public void test() {
System.out.println("匿名内部类的匿名对象直接作为方法的参数");
}
};
(4)需要接口A的实现类对象作为方法的参数
public static void testInterface(A a) {
a.test();
}
2.4.3应用
优化选择排序算法
2.5集合中的接口
除自定义接口以外,java中会提供很多接口。如集合中的【总接口】Collection。java中所有和集合有关的内容都是Collection接口的子接口。
如Collection接口下有List接口【有序可重复】、Set接口【无序不可重复】、Vector接口。
List接口下有ArrayList【可变长数组结构】、LinkedList【双向链表结构】
总接口Collection中的一些常用方法被其子接口继承。如void clear();、boolean remove();