一、接口
声明格式:
[访问修饰符] interface 接口名 [extends 父接口1, 父接口2 ···] {
常量定义 ;
方法定义 ;
}
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
- 接口和实现类不是父子关系,是实现规则的关系。
- 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
要点
1. 子类通过implements来实现接口中的规范。
2. 接口不能创建实例,但是可用于声明引用变量类型。
3. 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
4. JDK1.7之前,接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。
5. JDK1.8后,接口中可包含普通的静态方法。
public class TestInterface{
public static void main(String[] args) {
Vehicle.run();
Vehicle plane = new AirPlane();
plane.sell();
System.out.println(plane.master);
Vehicle car = new Car();
car.color();
car.sell();
}
}
//交通工具接口
interface Vehicle {
String master = "Health"; // 总是public static final类型的;
public static void run(){
System.out.println("i can run!");
}
public abstract void color(); //总是public abstract void color();
public abstract void sell();
}
/**Airplane类实现交通工具接口*/
class AirPlane implements Vehicle{
public void sell() {
System.out.println("I sell for ten million yuan.");
}
public void color() {
System.out.println("I am yellow");
}
}
/**Car类实现交通工具接口*/
class Car implements Vehicle{
@Override
public void color() {
System.out.println("I am red");
}
@Override
public void sell() {
System.out.println("I sell for 1000000 yuan.");
}
}
二、接口多继承
接口支持多继承。和类的继承类似,子接口继承某个父接口,将会获得父接口中所定义的一切。
示例:
interface A {
void testa();
}
interface B {
void testb();
}
/*接口可以多继承:接口C继承接口A和B*/
interface C extends A, B {
void testc();
}
//接口A、B、C都要实现
public class Test implements C {
public void testc() {
}
public void testa() {
}
public void testb() {
}
}