1、什么是interface接口?
首先,接口是与类平行的结构,两者都是独立的一个结构,都有自己的定义与规则,接口不属于类
2、如何定义interface接口?
定义接口中的成员:在jdk7以前只能定义全局常量(使用public static final修饰的变量,通常可以省略不写)与抽象方法(类似于方法,但是没有方法体,使用public abstract修饰变量名)。注意在接口中不能定义构造器!意味着接口不可以被实例化new出对象。
3、如何使用interface?
只要编写了接口,意味着要去使用实现,否则没有意义,在java中类利用implements关键字来实现接口,当使用implements时,必须要实现接口中定义的抽象方法,即覆盖接口中的抽象方法(类似于重写),只有实现了接口中的抽象方法才能去实例化本类中的对象。
4、interface可以实现多继承
java中不允许类的多继承,但是接口之间的多继承是被允许的,同时也可以接口的多实现,例如:class AA extends BB implements CC,DD,EE
5、interface的理解:
与abstract class有一定的异同点
相同点:显然的是interface与abstract class都是由abstract关键字修饰的,所以两者都是不可以实例化,同时为了本身有意义,两者分别需要实现类和子类去实现已经声明的抽象方法。
不同点:
①interface是通过implements来实现,而abstract class需要通过extends关键字由子类继承。
②一个类可以实现多个interface,但是一个类只能 继承一个abstract class
③对于interface而言,强调的是某一个功能的实现,例如USB接口功能,里边定义“传输功能”抽象方法,可以通过U盘类实现里面的抽象传输功能,可以通过打印机类实现抽象传输功能,在乎的是有这样一个功能,至于被谁实现这是不被关心的。而对于abstract class则更加强调的是所属关系,在一个vehicle类中,定义一个行驶距离的抽象方法,计算燃料效率的抽象方法,然后通过子类的继承实现抽象方法,可以发现方法与类之间有着某种特定关系。总而言之两者在第三点上的差异有,但是不大,无需过多在意。
④在abstract class中不是所有的方法都有abstract修饰,意味着可以有非abstract修饰的方法,此时方法中一定有方法体,所以说对于抽象方法的定义,在abstract class中是一定需要显式用abstract修饰,而在interface中则不一样,默认就有abstract修饰,所以abstract关键字也可以省去。
⑤abstract class可以使用public,protected修饰符修饰,而interface只能使用public修饰符修饰。
由上可见,interface是比abstract class更加抽象的一个结构。
简单的Interface实现:
UsbInterface接口:
public interface UsbInterface {
public void start(); //开始工作
public void stop(); //停止工作
}
Usb接口实现类:
public class Usb implements UsbInterface {
@Override
public void start() {
System.out.println("USB现在开始工作");
}
@Override
public void stop() {
System.out.println("USB现在停止工作");
}
}
Computer类(用于调用实现的抽象方法):
public class Computer {
public void transfer(UsbInterface ui){
ui.start();
System.out.println("传输过程中的细节操作");
ui.stop();
}
}
InterfaceTest测试类:
public class InterfaceTest {
public static void main(String[] args) {
Computer com = new Computer();
//UsbInterface ui = new Usb();使用了多态思想,
//UsbInterface ui是终极抽象,new出的对象向上转型
com.transfer(new Usb());
}
}
输出结果:
USB现在开始工作
传输过程中的细节操作
USB现在停止工作