java8 接口的默认方法和静态方法

java8 接口的默认方法和静态方法

首先我们要总体说一下,为什么要有这两个方法存在:

(1)原先的jdk7之类的,它们接口中的方法都是抽象方法,没有具体的实现,就相当于定义好了这个接口有哪些功能,却没有具体定义功能是怎么实现的,通常由接口的实现类来做具体功能实现。那么,如果面向接口编程,大家已经根据自己需要通过继承接口的方式来实现了自己的功能,突然有一天,产品提需求了,你需要给所有接口的实现类都添加一个新的功能即一个新的方法实现,而且这个方法可能大家都是一样的,那咋办?

jdk8以前的做法肯定是现在接口中定义这个抽象方法,然后所有实现类必须实现这个方法(不然接口中多出一个抽象方法,其他类都没有实现,编译是会报错的),如果实现类比较多,那改起来会很麻烦,这种情况下是不利于维护的。

那么我们在jdk8中就有了好的解决方式,就是在接口中加一个默认方法,这个默认方法有具体实现,这样就不用去修改实现类啦,很省事。

//定义一个接口,实现加减乘除
interface Calculator {
default int addThree(int first, int second, int Third){
return first + second + Third;
}
int add(int first, int second);
int subtract(int first, int second);
int divide(int first, int second);
int multiply(int first, int second);
}

(2)除了上面一个用处以外,还有一个应用场景,接口中的静态方法可以帮我们实现静态工厂类,不需要你去额外写一个工厂类了,怎么实现呢?

原始的实现工厂类:

public class Main {
public static void main(String[] args) {
System.out.println(CalculatorFactory.getInstance().add(1, 2));
}
}
//定义一个接口,实现加减乘除
interface Calculator {
int add(int first, int second);
int subtract(int first, int second);
int divide(int first, int second);
int multiply(int first, int second);
}
class BasicCalculator implements Calculator {
@Override
public int add(int first, int second) {
return first + second;
}
@Override
public int subtract(int first, int second) {
return first - second;
}
@Override
public int divide(int first, int second) {
return first / second;
}
@Override
public int multiply(int first, int second) {
return first*second;
}
}


//加减乘除的工厂
class CalculatorFactory {
public static Calculator getInstance() {
return new BasicCalculator();
}
}


那现在有了接口中的静态方法怎么解决呢?就是在接口中加一个静态方法就可以实现了,是不是比写一个工厂类快,方便

public class Main {
public static void main(String[] args) {
System.out.println(Calculator.getInstance().add(1, 2));
}
}
//定义一个接口,实现加减乘除
interface Calculator {
static Calculator getInstance() {
return new BasicCalculator();
}

int add(int first, int second);
int subtract(int first, int second);
int divide(int first, int second);
int multiply(int first, int second);
}
class BasicCalculator implements Calculator {
@Override
public int add(int first, int second) {
return first + second;
}
@Override
public int subtract(int first, int second) {
return first - second;
}
@Override
public int divide(int first, int second) {
return first / second;
}
@Override
public int multiply(int first, int second) {
return first*second;
}
}


好好学习!天天向上!

你可能感兴趣的:(java,Java8,接口新特性,接口静态方法,接)