Java 8 新增了接口的默认方法。
简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。
我们只需在方法名前面加个 default 关键字即可实现默认方法。

为什么要有这个特性?
之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类。为了解决这个问题,所以引进默认方法。
默认方法能让我们给接口增加新的方法,并且能保证对使用这个接口的老版本代码的兼容性。

语法

默认方法语法格式如下:

public interface MobilePhone {
default void print(){
System.out.println("我是手机!");
}
}

多个默认方法

一个接口有默认方法,考虑这样的情况,一个类实现了多个接口,且这些接口有相同的默认方法,以下实例说明了这种情况的解决方法:

public interface MobilePhone {
default void print(){
System.out.println("我是手机!");
}
} public interface HuaWei {
default void print(){
System.out.println("我是华为的!");
}
}

第一个解决方案是创建自己的默认方法,来覆盖重写接口的默认方法:

public class Car implements MobilePhone, HuaWei {
default void print(){
System.out.println("我是华为手机!");
}
}

第二种解决方案可以使用 super 来调用指定接口的默认方法:

public class Car implements MobilePhone, HuaWei {
public void print(){
Vehicle.super.print();
}
}

静态默认方法

Java 8 的另一个特性是接口可以声明(并且可以提供实现)静态方法。例如:

public interface HuaWei {
default void print(){
System.out.println("我是华为的!");
}
// 静态方法
static void FoldingScreen(){
System.out.println("折叠屏!");
}
}

默认方法和静态方法实例

我们可以通过以下代码来了解关于默认方法的使用,可以将代码放入 Java8Tester.java 文件中:

public class Java8Tester {
public static void main(String args[]){
MobilePhone mobilePhone = new Phone();
mobilePhone.print();
}
} interface MobilePhone {
default void print(){
System.out.println("我是手机!");
}
} interface HuaWei {
default void print(){
System.out.println("我是华为的!");
} static void blowHorn(){
System.out.println("折叠屏!");
}
} class Phone implements MobilePhone, HuaWei {
public void print(){
MobilePhone.super.print();
HuaWei.super.print();
HuaWei.blowHorn();
System.out.println("我是华为的折叠屏手机!");
}
}

参考:http://www.runoob.com/java/java8-default-methods.html

Java 8 特性 —— 默认方法和静态方法的更多相关文章

  1. java8-新特性--(接口的默认方法与静态方法)

    Java 8用默认方法与静态方法这两个新概念来扩展接口的声明. public interface Inte{ void method(); default void defaultMethod(){ ...

  2. Java 8 接口中的默认方法与静态方法

    Java 8 接口中的默认方法与静态方法 1. 接口中的默认方法 允许接口中包含具有具体实现的方法,该方法称"默认方法",默认方法使用用 default 关键字修饰. public ...

  3. Java 8-接口的默认方法和静态方法

    Java 8-接口的默认方法和静态方法 Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法.默认方法使得接口有点类似traits,不过要实现的目标不一样.默认方法使得开发者可以在 不破坏二 ...

  4. 【Java8新特性】接口中的默认方法和静态方法,你都掌握了吗?

    写在前面 在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法.而在Java8中,接口中可以声明默认方法和静态方法,本文,我们就一起探讨下接口中的默认方法 ...

  5. Java8新特性之四:接口默认方法和静态方法

    在JDK1.8以前,接口(interface)没有提供任何具体的实现,在<JAVA编程思想>中是这样描述的:"interface这个关键字产生了一个完全抽象的类,它根本就没有提供 ...

  6. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

  7. Java 8——接口中个的默认方法和静态方法

    在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...

  8. JDK8新特性之接口默认方法与静态方法

    接口默认方法与静态方法 有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题. 接口静态 ...

  9. java8新特性:接口的默认方法与静态方法

    接口中一共可以定义三种方法: 1.抽象方法,也就是需要实现者必须实现的方法,最常见的那种 2.默认方法,不需要实现者实现 3.静态方法,不需要实现者实现 默认方法: 允许在已有的接口中添加新方法,而同 ...

随机推荐

  1. maven的安装和环境配置

    一.下载maven Apache Maven下载地址:http://maven.apache.org/download.cgi 二.maven的安装 将下载好的安装文件解压到d盘根目录下即可(当然,这 ...

  2. Yii2设计模式——单例模式

    应用举例 在Yii.php中: require __DIR__ . '/BaseYii.php'; // Yii框架的帮助类,提供框架基本的功能 class Yii extends \yii\Base ...

  3. http协议、模块、express框架以及路由器、中间件和mysql模块

    一.http协议 是浏览器和web服务器之间的通信协议 1.通用头信息 request url:请求的url,向服务器请求的数据 request method:请求的方式   get.post sta ...

  4. 1.4 GPU分析

    shader  加宏   编译说明glsl

  5. Java日期的一些基本处理

    今天工作中用到一些日期的处理.这里做一点浅显的整理. 1.日期的加减: 日期加减一般用到Calendar这个类比较好.这样不用处理12月加一个月和28.30.31.加一天等问题 String last ...

  6. oracle相关函数

    (大写的PS:oracle存储过程测试进不去解决方案:重新编译:) TRUNC(sysdate, 'd') + 1   ////表示今天所在周的周一的年月日,如今天是2016.04.21周四,则TRU ...

  7. debian9.6修改系统语言

    (中文改英文) 在VM虚拟机中安装debian9.6(查看版本命令 cat /etc/debian_version ),安装时选择语言为中文:在控制台登录操作时,大部分提示信息显示为乱码,修改中文语言 ...

  8. RIPng(第三组)

    一.实验拓扑 2.地址规划 3.实验配置 1)配置各个路由器的端口地址,PC端地址采用自动配置 如本处的PC0,自动获取IPV6地址 2)配置RIP a.现在路由器开启RIP:ipv6 router ...

  9. springboot 实现配置文件给常量赋值

    @Component @ConfigurationProperties(prefix = "task.cron") public class TaskCronParam imple ...

  10. HTML5移动端触摸事件

    一.移动端事件问题 1.click事件300ms延迟问题 2007年第一代iphone发布,移动端Safari首创双击缩放功能,原理是click一次后,经过300ms之后检测是否再有一次click,如 ...