java8--接口增强(默认方法、静态方法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jasnet_u/article/details/83475015

Java8中接口增强:接口静态方法、接口默认方法。

一、接口静态方法

在接口方法前添加static 修饰符,表示接口中的静态方法。接口静态方法不要求子类实现、重写,且子类也无法实现和重写,

因为静态的东西脱离了对象而存在于类中。 子类继承和实现的是父类\接口的非静态抽象方法。

接口中新增静态方法,能够增强接口的功能,而对所有子类、子接口无影响 。如

public interface MC{

static  max(int a ,int b){

  return a>b?a:b;

}

}

二、接口默认方法

默认方法允许接口方法定义默认实现,子类中无须实现此方法而就可以拥有该方法及实现。如下:

public interface DefaultFuncInter {
    int getInt();
    default String getString(){
        return "Default String";
    }
}
默认方法主要优势是提供了一种扩展接口的方法,而不破坏现有代码。如果一个已经投入使用的接口需要扩展一个新的方法,在JDK8以前,我们必须再该接口的所有实现类中都添加该方法的实现,否则编译会出错。如果实现类数量很少且我们有修改的权限,可能工作量会少,但是如果实现类很多或者我们没有修改代码的权限,这样的话就很难解决了。而默认方法提供了一个实现,当没有显式提供时就默认采用这个实现,这样新添加的接口就不会破坏现有的代码。默认方法另一个优势是该方法是可选的,子类可以根据自身的需求可重写(override)父类\接口的实现。

再看下面一个例子 :

public class DefaultMethodTest {

public static void main(String[] args) {
 A    a=new C();
 a.hi();
 a.print();
}

}

interface  A{


default void print() {
System.out.println("i am A ");
}
default   void hi() {
System.out.println("hi i am A");
}
}


interface  B{
default void print() {
System.out.println("i am B ");
}
}

class  C implements A,B {

@Override
public void print() {
A.super.print();

}
}

C类 implements 了A、B两个接口,而A、B两个接口中都定义了print的默认方法,则在子类C中必须重写这个默认方法。

猜你喜欢

转载自blog.csdn.net/jasnet_u/article/details/83475015