【【Java基础】基础】Java8新特性新特性—接口中使用接口中使用default和和static关键字关键字
目录目录一.新特性二.defalut方法三.static方法
接口中的变量默认类型是public static final,也是就是说是 公有静态常量公有静态常量 。 而方法默认是public abstract,公有抽象方法公有抽象方法,但是事实
真的是这样吗?
一一.新特性新特性
Java 1.8对接口有两个方面的增强:接口中可以添加使用对接口有两个方面的增强:接口中可以添加使用default或者或者static修饰的方法修饰的方法
增加default方法:又叫做接口扩展方法,即在不破坏java现有实现架构的情况下能往接口里增加新方法, default关键字可以给接口添加
一个非抽象的方法实现,子类可以直接调用!
如果想对接口增加一个新方法,那么需要对实现该接口的所有类进行修改,如果接口实的现类很多,就会带来很大的工作量,而且
还很容易破坏以前的代码,带来一些问题。如果把新的方法定义为default方法,就可以避免对其他实现类的修改。尽管如此,Default
方法不适合过多使用
增加static方法: 接口中用static修饰的方法也可以有方法体,和类的静态方法一样,可以通过 接口名接口名.方法名方法名 进行接口中 static方法的调
用。
二二.defalut方法方法
实现类会继承接口中的实现类会继承接口中的default方法方法
如果接口A中有default方法:
public interface A {
public default void a(){
System.out.println("这是AAA");
}
}
B类实现接口A:
public class B implements A{
}
那么B类将会继承接口A中的a方法:
public class Main {
public static void main(String[] args) {
B b = new B();
b.a();
}
}
执行结果:
如果一个类同时实现接口如果一个类同时实现接口A和和B,接口,接口A和和B中有相同的中有相同的default方法,这时,该类必须重写接口中的方法,这时,该类必须重写接口中的default方法方法
为什么要重写呢?是因为,类在继承接口中的default方法时,不知道应该继承哪一个接口中的default方法。
接口A:
public interface A {
public default void a(){
System.out.println("这是A");
}
}
接口B:
public interface B {
public default void a(){
System.out.println("这是B");
}
}
Test类: