接口的的定义格式:
public/default interface 接口名字{接口体}
注意:
- 接口的访问修饰符只能时public或者default;
- 接口可以使用extends关键字多继承;
- 接口中的属性只能是常量,总是被public static final修饰,不写也是;
- 接口中的方法只能是:public abstract,不写也是;
- 子类通过implements关键字实现接口,且可以实现一个或多个接口;
- 接口不能实例化对象,但可以用来声明引用对象类型;
- 如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法,且重写的方法的访问权限必须是public;
- 抽象类既可以重写接口中的方法,也可以直接拥有接口中的方法;
- jdk1.7之前,接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法
- jdk1.8之后,接口中包含普通的静态方法;
- 接口回调:可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法
示例代码:
//Flyer.javapublic interface Flyer {int FLY_HEIGHT=1000;void fly();
}//Honey.javapublic interface Honey {int HONEY_RATE=100;void honey();
}//AirVehicle.javapublic abstract class AirVehicle implements Flyer{public abstract void light();
}//Vehicle.javapublic class Vehicle extends AirVehicle{@Overridepublic void fly() {System.out.println("我是飞行器,我可以飞");}@Overridepublic void light() {System.out.println("我是飞行器,我可以发光");}}//SuperMan.javapublic class SuperMan extends AirVehicle implements Flyer,Honey {@Overridepublic void honey() {System.out.println("我是超人,我是善良的");}@Overridepublic void fly() {System.out.println("我是超人,我能飞");}@Overridepublic void light() {System.out.println("我是超人,我能发光");}}//Main.java
public class Main {public static void main(String [] args) {AirVehicle a=new SuperMan();
// Flyer d=new SuperMan();跟a上转型为AirVehicle类似,只能调用Flyer接口中有的方法和属性SuperMan b = new SuperMan();Vehicle c= new Vehicle();/*Vehivle类继承了AirVehicle抽象类,而AirVehicle抽象类声明实现了
Flyer接口,所以AirVehicle直接拥有了fly抽象方法和常量FLY_HEIGHT,这些和light抽象方法一起传递给了Vehicle*/a.fly();a.light();
/* a.honey(); 非法,a上转型成为了AirVehicle类型,AirVerhicle中没有honey方法,
但因为AirVerhicle是抽象类,声明实现Flyer接口,所以它就直接拥有了fly方法*/b.fly();b.light();b.honey();c.fly();c.light();
// d.fly();合法,接口回调
// d.honey();非法System.out.println("a.FLY_HEIGHT:"+a.FLY_HEIGHT);
// System.out.println("a.HONEY_RATE:"+a.HONEY_RATE);非法System.out.println("b.FLY_HEIGHT:"+b.FLY_HEIGHT);System.out.println("b.HONEY_RATE:"+b.HONEY_RATE);System.out.println("c.FLY_HEIGHT:"+c.FLY_HEIGHT);}
}//运行结果:
我是超人,我能飞
我是超人,我能发光
我是超人,我能飞
我是超人,我能发光
我是超人,我是善良的
我是飞行器,我可以飞
我是飞行器,我可以发光
a.FLY_HEIGHT:1000
b.FLY_HEIGHT:1000
b.HONEY_RATE:100
c.FLY_HEIGHT:1000