Java基础-interface 接口
- 接口的本质是规范和约束,就像人间的法律一样,制定好后大家都去遵守。
interface关键字
使用interface关键字定义的的类就是接口,与抽象类不同的是:普通类是通过abstract关键字而接口是使用interface关键字
public interface InterfaceTest {}
接口中的一般方法都是抽象方法,而实现了接口的类,就需要重写接口中抽象方法。
在Java中,继承是单继承的,但我们可以利用接口实现多继承。
- 接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题
- 接口中的变量隐式的使用
public static final
修饰,并且需要给出初始值。方法隐式的使用public abstract
修饰(并且只能是 public ,如果是 private,procted,那么就编译报错) - 注意:接口没有构造方法。
Java8新特性
在JDK1.8以前,接口(interface)没有提供任何具体的实现,在《JAVA编程思想》中是这样描述的:“interface这个关键字产生了一个完全抽象的类,它根本就没有提供任何具体的实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体实现”。
但是在jdk1.8时,这种限制被打破了,我们可以在接口中定义默认方法,接口的默认方法有助于在扩展系统功能的同时,不对现有的继承关系及类库产生很大的影响。例如在JDK1.8中,Java集合框架的Collection接口增加了stream()等默认方法,这些默认方法即增强了集合的功能,又能保证对低版本的JDK的兼容。
定义默认方法只需用使用default关键字即可定义,该方法可以由实现类进行调用。
定义静态方法的方式不变,使用static关键字即可定义,调用方式也可以直接由接口名.静态方法名即可
public interface InterfaceTest {
default void test(){
System.out.println("我是默认方法");
}
static void test01(){
System.out.println("我是静态方法");
}
}
当一个实现类实现了多个接口时,若两个或多个接口中都有相同的默认方法时,实现类必须重写默认方法。
可以看到,如果不重写接口类中的默认方法则编译器报错。
参考:Java8新特性之四:接口默认方法和静态方法 - 无恨之都 - 博客园 (cnblogs.com)
参考:java8中的default关键字_我是兴锅的博客-CSDN博客
抽象类与接口的区别
-
抽象类使用abstract声明,接口使用interface定义
-
接口没有构造器,抽象类有构造器
-
抽象类只能继承一次,但是可以实现多个接口
-
接口和抽象类必须实现其中所有的方法,抽象类中如果有未实现的抽象方法,那么子类也需要定义为抽象类。抽象类中可以有非抽象的方法
-
接口支持可以多继承,即一个接口可以extends多个接口;
个人理解,若有错误,欢迎指正~