接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来
语法
interface 接口名{
//属性
//方法
}
class 类名 implements 接口{
自己属性;
自己方法;
必须实现的接口的抽象方法
}
在 Jdk7.0 前,接口里的所有方法都没有方法体,即都是抽象方法
Jdk8.0 后接口可以有静态(static)方法,默认(default)方法,也就是说接口中可以有方法的具体实例
细节
接口不能被实例化
接口中所有的方法是 public 方法,接口中抽象方法,可以不用 abstract 修饰
一个普通类实现接口,就必须将该接口的所有方法都实现
抽象类实现接口,可以不用实现接口的方法
一个类同时可以实现多个接口
接口中的属性只能是 final 的,而且是 public static final 修饰。
比如 int a = 1; 实际上是 public static final int a = 1; (必须初始化)
接口中属性的访问形式:接口名.属性名
接口不能继承其他的类,但是可以继承多个别的接口
interface A extends B,C{}
接口的修饰符只能是 public 和默认,这点和类的修饰符是一样的
接口和继承
接口多态参数
接口类型的变量 if01 可以指向实现了IF接口类的对象实例
IF if01 = new Monster(); if01 = new Car(); interface IF {} class Monster implements IF {} class Car implements IF {}
接口多态数组
public class Interface01 { public static void main(String[] args) { //多态数组 -> 接口类型数组 Usb[] usbs = new Usb[2]; usbs[0] = new Phone_(); usbs[1] = new Camera_(); for (int i = 0; i < usbs.length; i++) { usbs[i].work(); //动态绑定 //类型的向下转换 if (usbs[i] instanceof Phone_) { //判断它的运行类型是 ((Phone_) usbs[i]).call(); } } } } interface Usb { void work(); } class Phone_ implements Usb { public void call() { System.out.println("手机可以打电话。。。"); } @Override public void work() { System.out.println("手机工作中、、、"); } } class Camera_ implements Usb { @Override public void work() { System.out.println("相机工作中..."); } } /* 运行结果: 手机工作中、、、 手机可以打电话。。。 相机工作中... */
接口多态传递现象
public class InterfacePolyPass { public static void main(String[] args) { //接口类型的变量可以指向,实现了该接口的类的对象实例 IG ig = new Teacher(); //如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口 //那么,实际上就相当于 Teacher 类也实现了 IH接口 //这就是所谓的接口多态传递现象 IH ih = new Teacher(); } } interface IH { void hi(); } interface IG extends IH{ } class Teacher implements IG { @Override public void hi() { } }