接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
接口的声明语法格式如下:
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
类使用implements
关键字实现接口。在类声明中,Implements
关键字放在class声明后面。
实现一个接口的语法,可以使用这个公式:
...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
首先,定义一个模拟usb的接口文件:
/**
* 接口
*/
public interface UsbInterface {
// 规定接口的相关方法,接口规范
// 接口中定义抽象方法可以省略abstract关键字
public void start();
public void stop();
}
接着,模拟两个具体的实例,手机和相机:
/**
* 实现手机📱接口
*/
public class Phone implements UsbInterface{
@Override
public void start() {
System.out.println("📱开始连接...");
}
@Override
public void stop() {
System.out.println("📱中断连接...");
}
}
/**
* 实现相机📷接口
*/
public class Camera implements UsbInterface{
@Override
public void start() {
System.out.println("📷开始连接...");
}
@Override
public void stop() {
System.out.println("📷中断连接...");
}
}
实现一个计算机类,模拟手机和相机使用计算机的usb接口:
/**
* 开始工作
*/
public class Computer {
public void work(UsbInterface usbInterface) {
// 通过接口调用方法
// 这里可以体现多态思想
usbInterface.start();
usbInterface.stop();
}
}
接口可以有自己的属性和方法,接口的方法需要使用default
或者static
进行修饰:(接口的方法只能在jdk8
之后进行使用)
public int n = 521;
default public void show() {
System.out.println("我是接口的方法");
}
public static void hi() {
System.out.println("你好啊");
}
接口在定义实现规则方面具有先天的优势,接口编程可以大大提高软件开发的质量和规范🎈
接口不能被实例化!
接口中所有的方法都是public
方法🐱👓,所以在进行接口抽象方法定义时,无需声明abstract
和pubilc
抽象类可以不用实现接口中的抽象方法😁
一个类可以同时实现多个接口,它同时需要重写所有接口的所有抽象方法
接口中所有的属性都是默认public static final
修饰,这很重要
一个接口不能继承其他的类,但是可以继承其他的接口(接口和接口继承,类和接口是实现关系)
接口可以使用的修饰符和类一样,为public
或者默认
接口和继承的区别:当子类继承父类就自动拥有父类的功能,如果子类需要扩展功能,可以通过实现接口的方式进行扩展🎁实现接口是对java单继承机制的一种补充
实例:
/**
* 接口的多态传递机制
*/
interface TextA {}
interface TextB extends TextA {}
class Teacher implements TextB {}
测试类:
// 接口的多态传递机制
// 接口类型的变量可以指向实现了该接口的类的对象实例
TextB textB = new Teacher();
// 如果TextB继承了TextA接口,而Teacher实现了TextB接口
// 那么实际上相当于Teacher类也实现了TextA接口
TextA textA = new Teacher();
莫道谗言如浪深,莫言迁客似沙沉。 千淘万漉虽辛苦,吹尽狂沙始到金🚀