1.概述
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
接口的声明语法格式如下:
[可见度] interface 接口名称 [extends 其他的接口名] { // 声明变量 // 抽象方法 }
类使用implements
关键字实现接口。在类声明中,Implements
关键字放在class声明后面。
实现一个接口的语法,可以使用这个公式:
...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
2.接口使用
首先,定义一个模拟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(); } }
3.接口注意事项
接口可以有自己的属性和方法,接口的方法需要使用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单继承机制的一种补充
4.接口多态传递机制
实例:
/** * 接口的多态传递机制 */ interface TextA {} interface TextB extends TextA {} class Teacher implements TextB {}
测试类:
// 接口的多态传递机制 // 接口类型的变量可以指向实现了该接口的类的对象实例 TextB textB = new Teacher(); // 如果TextB继承了TextA接口,而Teacher实现了TextB接口 // 那么实际上相当于Teacher类也实现了TextA接口 TextA textA = new Teacher();
莫道谗言如浪深,莫言迁客似沙沉。 千淘万漉虽辛苦,吹尽狂沙始到金🚀