什么是接口:
- 硬件接口:指的是两个硬件设备之间的连接方式。硬件接口既包括物理上的接口,还包括逻辑上上的数据传输协议。
- 软件接口:程序代码,特殊的类。表示一种规范,是具有N个方法的特征集合。
在封装时,显示器封装了很多电子元件,最终向外暴露数据交互的孔——>>接口,目的在于实现设备和设备之间的通信。
在Java中,接口表示一种规范/约束/要求实现者必须遵循该规范。用来约束使用者该怎么做。
Java中的接口
专家说:多个抽象类的抽象就是接口。
说人话:在Java中最小的程序单元就是类,接口其实是一个特殊的类。
Java中的接口表示规范,用于定义一组抽象方法,表示某一类事务必须具备的功能,要求实现类必须来实现该接口并提供方法实现。
//演示接口
interface IConnect{
String PI= "aaa"; //接口中的成员变量
void doWork(); //接口中的方法
interface IWatch{ // 接口中的类(接口)
}
}
public class InterfaceTest {
public static void main(String[] args) {
System.out.println("AA");
}
}
接口的定义和继承
类和类之间是继承关系:用extends来表示。
接口和接口之间只能是继承关系:用extends来表示。
接口和实现类之间只能是实现关系:用implements来表示。
接口的实现
程序示例
interface PaXing{
void doWork(); //接口中的方法
}
interface ShuiXing{
void doSwim(); //接口中的方法
}
interface LiangQi extends PaXing,ShuiXing{ //接口的继承
void doSwim(); //接口中的方法
}
class YYY implements LiangQi{ //类实现子类接口
public void doWork(){
System.out.println("This is YYY dowork Cat!");
}
public void doSwim(){
System.out.println("This is YYY dowork Cat!");
}
}
class SSS implements PaXing,ShuiXing{ //类实现多接口
public void doWork(){
System.out.println("This is SSS dowork Cat!");
}
public void doSwim() {
System.out.println("This is SSS doswim Cat!");
}
}
class Fish implements ShuiXing{ //类实现单接口
public void doSwim(){
System.out.println("This is Fish doswim fish!");
}
}
public class InterfaceTest {
public static void main(String[] args) {
SSS a=new SSS();
a.doSwim();
a.doWork();
System.out.println("****************");
PaXing d= new SSS();
d.doWork(); //没有doSwim()方法
System.out.println("****************");
YYY b=new YYY(); //鄙视写法
b.doSwim();
b.doWork();
System.out.println("****************");
LiangQi c= new YYY(); //高级多态写法,面向接口编程。
c.doSwim();
c.doWork();
System.out.println("****************");
ShuiXing fish1= new Fish();
fish1.doSwim();
}
}
运行结果
This is SSS doswim Cat!
This is SSS dowork Cat!
****************
This is SSS dowork Cat!
****************
This is YYY dowork Cat!
This is YYY dowork Cat!
****************
This is YYY dowork Cat!
This is YYY dowork Cat!
****************
This is Fish doswim fish!
接口和抽象类的区别
相同点
- 都位于继承的顶端,用于被其他实现或继承。
- 都不能实例化
- 都可以定义抽象方法,其子类/实现类都必须覆写这些抽象方法。
不同点
- 接口没有构造方法,抽象类有。
- 抽象类可包含抽象方法和普通方法,接口只能包含抽象方法(Java8之前)。
- 类是单继承(可能是继承抽象类),却可以实现多个接口。接口是多继承。(接口弥补了java的单继承)
- 成员变量:接口默认是public static final,抽象类是默认包权限。
- 方法:接口里默认是public abstract ,抽象类默认是默认包访问权限。
- 内部类:接口里默认是public static,抽象类默认是默认包访问权限。
如果接口和实现类可以完成相同的功能,尽量使用接口,面向接口编程。