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。

  1. 接口中的default方法,可以写方法内容。
  2. 接口中的default方法不强制实现类重写,不会影响到已有的实现类。
  3. 接口的实现类,可以调用接口中的default方法。

static方法

  1. 接口中的static方法,可以写方法内容。
  2. 接口中的static方法不允许实现类重写(如果重写方法加上@Override会报错),不会影响到已有的实现类。
  3. 接口中的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方法的区别和使用的更多相关文章

  1. Servlet的Service方法和doget 和 dopost方法的区别,常见的错误解析

    package com.sxt.in; import java.io.IOException; import javax.servlet.ServletException; import javax. ...

  2. service 方法和doGet、doPost方法的区别

    Service方法和doGet和doPost方法的区别service:     可以处理get/post方式的请求,如果servlet 中有service方法,会优先调用service方法进行处理do ...

  3. java中构造方法和this,static关键字

    构造方法: 构造方法是一种特殊的方法,用于创建该类的对象,对对象的数据进行初始化 格式如下: [修饰符] 类名(形参列表){ 方法体 } 特点 A:方法名和类名相同  B:没有返回值类型,连void都 ...

  4. toString方法和valueof()方法的区别

    JavaScript引用类型之Array数组的toString()和valueof()方法的区别   一.转换方法 1.在JavaScript中几乎所有对象都具有toLocaleString().to ...

  5. Thread start()方法和run()方法的区别

    转自:http://www.cnblogs.com/skywang12345/p/3479083.html start():作用一个新的线程,新线程会执行相应的run()方法,start()不能被重复 ...

  6. 牛客网Java刷题知识点之调用线程类的start()方法和run()方法的区别

    不多说,直接上干货! 前期博客 牛客网Java刷题知识点之四种不同的方式创建线程 这里很简单 首先,系统通过调用线程类的start()方法来启动一个线程,此时这个线程处于就绪状态,而非运行状态,也就意 ...

  7. java8新特性:interface中的static方法和default方法

    java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...

  8. Java8新特性(一)_interface中的static方法和default方法

    什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...

  9. Java8新特性interface中的static方法和default方法

    static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface InterfaceA { /** * 静 ...

  10. Classloader中loadClass()方法和Class.forName()区别

    Classloader中loadClass()方法和Class.forName()都能得到一个class对象,那这两者得到的class对象有什么区别呢 1.java类装载的过程 Java类装载有三个步 ...

随机推荐

  1. html监听标签的resize

    <html> <body> <div id="div1" style="width:100%;height:100%;"> ...

  2. Linux-目录-cd-mdkir-rm-ls-pwd

  3. ChatGPT-NextWeb部署和调试打造属于自己的GPT

    首先我关注这个项目有一段时间了,不得不说作者和他的社区真的很猛! 首先这个项目截至目前已经有了40.9K的Start了,Fork也已经有了38.1K了,这个数据真的超级牛批了. 那么我们来看一下这款号 ...

  4. SqlSugar DbContext

    title: SqlSugar DbContext date: 2023-02-16 20:01:41 tags: SqlSugar categories: ORM description: 总结整理 ...

  5. [转帖]十步解析awr报告

    http://www.zhaibibei.cn/awr/1.1/ 从这期开始讲解awr报告的部分,首先讲解awr整体的部分 后续会针对不同的点进行讲解 1. 数据库细节 这部分可以看到 数据库的版本 ...

  6. [转帖]看6大国产CPU加速替代,谁才是“王者”选手?

    https://baijiahao.baidu.com/s?id=1761150458273739276&wfr=spider&for=pc 2023-03-23 17:33湖北匠心计 ...

  7. Mac 版的 Quicker CirMenu

    之前在Windows上用过一款圆盘菜单工具Quicker, 感觉非常方便, 换成Macos后,一直没有找到类似应用. 最近终于发现,一款好用的快捷键收集,触发工具CirMenu. 其核心功能是可以根据 ...

  8. 微信小程序之某个节点距离顶部和底部的距离 createSelectorQuery

    这个方法可以用来在上滑滚动的时候,让某一个区域置顶, 在下滑的时候,又变为原来的位置哈! <huadong :class="{'hident':isFixed}" id=&q ...

  9. 【代码片段】fasthttp 中的输出使用 gzip 压缩

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 直接上代码: import ( "github. ...

  10. Go基础之指针

    Go语言中的指针 目录 Go语言中的指针 一.Go语言中的指针介绍 1.1 指针介绍 1.2 基本语法 1.3 声明和初始化 1.4 Go 指针的3个重要概念 1.4.1 指针地址(Pointer A ...