java8 接口的默认方法和静态方法
来源:互联网 发布:android 修改wifi mac 编辑:程序博客网 时间:2024/05/21 12:09
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;
}
}
好好学习!天天向上!
- JAVA8接口默认方法和静态方法
- java8接口默认方法和静态方法
- java8新特性接口的默认方法和静态方法
- java8新特性接口的默认方法和静态方法
- Java8---2.函数接口的默认方法和静态方法
- 二、Java8的默认方法和静态接口方法
- java8 接口的默认方法和静态方法
- java8之接口的默认静态方法
- Java8之默认方法和静态接口方法
- Java8接口中默认方法和静态方法
- Java8接口变化-静态方法&默认方法
- Java8特性之接口的默认方法与静态方法
- Java8新特性之接口的默认方法和静态方法
- Java8 新特性之二---------接口的默认方法和静态方法
- Java8新特性之接口的默认方法和静态方法
- Java8新特性之接口的默认方法和静态方法
- Java8 接口的默认方法
- Java8接口的默认方法
- android SQLiteDatabase 错误 database disk image is malformed
- 经纬度转换
- jQuery检测是否客户端是否被禁用cookie
- QT 不同版本的编辑器 打包程序,保证其他电脑可用步骤
- JavaScript忍者秘籍笔记04之线程和定时器
- java8 接口的默认方法和静态方法
- 深入理解springmvc 框架思想
- 腾讯发布糖大夫二代,与顶级名医共推新型控糖服务
- 女性不爱智能手表?这个报告要打脸三星高管
- 印度说:生男生女都一样!谷歌、微软、雅虎你们必须配合我
- iPhone 7 Plus芯片级拆解报告
- 从架构理解价值-我的软件世界观
- Servlet学习笔记—Servlet概述
- Java 将Excel2003(xls)/Excel2007(xlsx)转为Htm格式文件