Java8接口中抽象方法和default和static方法的区别和使用
Java接口说明
传统的理解是接口只能是抽象方法。但是程序员们在使用中,发现很不方便,实现接口必须重写所有方法,很麻烦。所以java设计者妥协了,在java8中,支持default和static方法,这样,实现接口时,可以选择不对default修饰的方法重写。
抽象方法
接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
这两个关键字修饰符,可以选择性地省略。
方法的三要素,可以随意定义。
public interface MyInterfaceAbstract{
//这是一个抽象方法
public abstract void methodAbs1();
//这也是抽象方法
abstract void methodAbs20:
// 这也是抽象方法
public void methodAbs3();
//这也是抽象方法 void methodAbs4();
}
default方法
当一个接口要添加一些新的公共逻辑,写了一个新的方法,那么所有的实现类都需要重写新方法,如果实现类太多,会非常麻烦。
这时可以使用 default。
- 接口中的default方法,可以写方法内容。
- 接口中的default方法不强制实现类重写,不会影响到已有的实现类。
- 接口的实现类,可以调用接口中的default方法。
static方法
- 接口中的static方法,可以写方法内容。
- 接口中的static方法不允许实现类重写(如果重写方法加上@Override会报错),不会影响到已有的实现类。
- 接口中的static方法,可以直接通过接口名称调用。
示例
- OrderService接口
public interface OrderService {
/**
* 接口中的变量都是 默认 public static final的,可以不用写这些修饰符
*/
String NAME = "static";
/**
* static方法,可以直接通过接口名称调用 static方法。
* 比如 OrderService.selectName();
*
*/
static String selectStatic() {
return NAME;
}
/**
* default方法,可以写方法内容,实现类不强制重写 default方法。
*
*/
default String selectDefault() {
return "default";
}
String selectOrder();
}
- 接口实现类
public class OrderServiceImpl implements OrderService {
@Override
public String selectOrder() {
return "order";
}
}
- 测试
public class InterfaceTest {
public static void main(String[] args) {
OrderServiceImpl orderServiceImpl = new OrderServiceImpl();
//接口的实现类,可以调用接口中的default方法
String user = orderServiceImpl.selectDefault();
System.out.println("selectDefault()结果为:"+user);
//static方法,可以直接通过接口名称调用,无需实例化
String name = OrderService.selectStatic();
System.out.println("OrderService.selectStatic()结果为:"+ name);
}
}
Java8接口中抽象方法和default和static方法的区别和使用的更多相关文章
- Servlet的Service方法和doget 和 dopost方法的区别,常见的错误解析
package com.sxt.in; import java.io.IOException; import javax.servlet.ServletException; import javax. ...
- service 方法和doGet、doPost方法的区别
Service方法和doGet和doPost方法的区别service: 可以处理get/post方式的请求,如果servlet 中有service方法,会优先调用service方法进行处理do ...
- java中构造方法和this,static关键字
构造方法: 构造方法是一种特殊的方法,用于创建该类的对象,对对象的数据进行初始化 格式如下: [修饰符] 类名(形参列表){ 方法体 } 特点 A:方法名和类名相同 B:没有返回值类型,连void都 ...
- toString方法和valueof()方法的区别
JavaScript引用类型之Array数组的toString()和valueof()方法的区别 一.转换方法 1.在JavaScript中几乎所有对象都具有toLocaleString().to ...
- Thread start()方法和run()方法的区别
转自:http://www.cnblogs.com/skywang12345/p/3479083.html start():作用一个新的线程,新线程会执行相应的run()方法,start()不能被重复 ...
- 牛客网Java刷题知识点之调用线程类的start()方法和run()方法的区别
不多说,直接上干货! 前期博客 牛客网Java刷题知识点之四种不同的方式创建线程 这里很简单 首先,系统通过调用线程类的start()方法来启动一个线程,此时这个线程处于就绪状态,而非运行状态,也就意 ...
- java8新特性:interface中的static方法和default方法
java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...
- Java8新特性(一)_interface中的static方法和default方法
什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...
- Java8新特性interface中的static方法和default方法
static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface InterfaceA { /** * 静 ...
- Classloader中loadClass()方法和Class.forName()区别
Classloader中loadClass()方法和Class.forName()都能得到一个class对象,那这两者得到的class对象有什么区别呢 1.java类装载的过程 Java类装载有三个步 ...
随机推荐
- 后端开发之光!Django应用的容器化部署实践~
在此之前,我一直用uwsgi+virtualenv+nginx方式进行应用部署,操作起来比较麻烦,而且依赖于服务器上的Python版本,服务的管理方面单纯uwsgi + pid算不上特别麻烦但总没有d ...
- Chrome显示和更改显示网页字符集的方法
Chrome显示和更改显示网页字符集的方法 背景 前段时间学习和总结了unicode和utf8的一些知识. 当时想到应该学习和整理一下网站网页的编码格式字符集相关的内容 想着既然给自己立了flag, ...
- [转帖]谈谈ClickHouse性能情况以及相关优化
https://zhuanlan.zhihu.com/p/349105024 ClickHouse性能情况 主要分为4个方面 1.单个查询吞吐量 场景一: 如果数据被放置在page cache中,则一 ...
- [转帖]Nginx 反向代理解决跨域问题
https://juejin.cn/post/6995374680114741279 编写代码两分钟,解决跨域两小时,我吐了. 如果对跨域还不了解的朋友,可以看这篇:[基础]HTTP.TCP/IP 协 ...
- [转帖]LVS入门篇(四)之LVS实战
LVS入门篇(四)之LVS实战 https://www.cnblogs.com/linuxk/p/9360922.html 一.LVS的NAT模式实战 1.环境说明: HOST OS role rem ...
- [转帖]Linux shell 单引号和双引号
https://www.cnblogs.com/airoot/p/15324883.html 在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别,所以就整理一下供以后 ...
- 【转帖】route命令详解大全(route命令使用实例)
https://www.cxdtop.cn/n/225987.html 在实际的网络应用中,我们可能会遇到这样的网络环境,上外网我们使用的无线网络,内网我们使用的是有限网卡.在设置完成后会出现外网和内 ...
- [转帖]使用GCC编译器实测兆芯KX-U6780A的SPEC CPU2006成绩
https://baijiahao.baidu.com/s?id=1722775453962904303 兆芯KX-U6780A是一款8核2.7GHz的使用x86/AMD64指令集(架构)的国产C ...
- [转帖]发布即巅峰!万字长文:Java性能调优六大工具:MAT内存分析工具
jianshu.com/p/4ed3dd8b7b83 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基 ...
- vim配置的学习与总结
摘要 有时候在linux里面操作需要使用粘贴以及其他处理. 很多发行版, 遇到 # 会自动退格, 很难受. 想着能够处理一下vim的默认设置可以好很多. 所以这里简单总结一下. 配置文件 vim的配置 ...