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

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中必须重写这个默认方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值