一、定义
接口是抽象方法和常量值定义的集合。
接口和类是并列的关系。但从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义(JDK1.7及之前)
二、特点
1.接口中的所有成员变量都默认是用public static final修饰的,称之为全局静态常量;
2.接口中所有抽象方法都默认是用public abstract修饰的;
3.接口中没有构造器;
4.接口采用多继承机制。
interface A{
int ID=1;
void start();
void run();
void stop();
}
三、作用
被实现类实现(面向接口编程)
四、JDK1.8接口新特性
可以定义静态方法和默认方法
public interface Run {
//接口中的静态方法
public static void method1() {
System.out.println("跑");
}
//接口中的默认方法
public default void method2() {
System.out.println("Run:method2");
}
public default void method3() {
System.out.println("Run:method3");
}
}
public class SuperClass {
public void method3() {
System.out.println("SuperClass:method3");
}
}public class SubClass extends SuperClass implements Run {
//重写方法3
public void method3() {
System.out.println("SubClass:method3");
}
}
public class Test {
public static void main(String[] args) {
//1.接口中定义的静态方法,只能通过接口来调用
Run.method1();
SubClass sub=new SubClass();
//2.通过实现类的对象,可以调用接口中的默认方法
sub.method2();
//3.如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的方法,
//那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参方法
sub.method3();
}
}
注意:
1.若一个接口中定义了一个默认方法,而另外一个接口中也定义了一个同名同参数的方法(不管此方法是否是默认方 法),在实现类同时实现了这两个接口时,会出现:接口冲突。
解决办法:实现类必须覆盖接口中同名同参数的方法,来解决冲突。
2.若一个接口中定义了一个默认方法,而父类中也定义了一个同名同参数的非抽象方法,则不会出现冲突问题。因为此时遵守:类优先原则。接口中具有相同名称和参数的默认方法会被忽略。