Java8 - 接口默认方法
2019独角兽企业重金招聘Python工程师标准>>>
Java8 - 接口默认方法
什么是默认方法,为什么要有默认方法
简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。
为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的 java 8之前的集合框架没有foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了使接口没有引入与现有的实现不兼容发展。
如以下所示,
public interface Animal {default void eat() {System.out.println("animal eat default method");}
}
声明了一个接口,里面只有一个默认方法。然后写一个具体的类实现这个接口,
public class Dog implements Animal {public void sayHi() {System.out.println("dog");}public static void main(String args[]) {Dog dog = new Dog();dog.eat();}
}
再具体的类里面不是必须重写默认方法,但必须要实现抽象方法。
默认方法的多重继承
如下所示代码,
/*** Created by xinxingegeya on 15/9/18.*/
public interface A {void doSomething();default void hello() {System.out.println("hello world from interface A");}default void foo() {System.out.println("foo from interface A");}
}interface B extends A {default void hello() {System.out.println("hello world from interface B");A.super.hello();this.foo();A.super.foo();}
}class C implements B, A {@Overridepublic void doSomething() {System.out.println("c object need do something");}public static void main(String args[]) {A obj = new C();obj.hello();//调用B的方法obj.doSomething();}
}
打印结果:
hello world from interface B
hello world from interface A
foo from interface A
foo from interface A
c object need do something
obj.hello()调用的是B接口中的默认方法。同时在B接口中的默认方法有调用了父接口中的默认方法。
我们再来看一个例子,思考一下在多重继承中,如果出现了同名的默认方法,如下所示,
/*** Created by xinxingegeya on 15/9/18.*/
public interface D {default void hello() {System.out.println("hello world from D");}
}interface E {default void hello() {System.out.println("hello world from E");}
}class F implements D, E {@Overridepublic void hello() {System.out.println("hello world F class");D.super.hello();E.super.hello();}public static void main(String args[]) {F f = new F();f.hello();}}
我们需要指定调用哪个接口的默认方法如下,
D.super.hello();E.super.hello();
======END======
转载于:https://my.oschina.net/xinxingegeya/blog/508046
Java8 - 接口默认方法相关推荐
- 30分钟入门Java8之默认方法和静态接口方法
2019独角兽企业重金招聘Python工程师标准>>> 30分钟入门Java8之默认方法和静态接口方法 作者:@JohnTsai 本文为作者原创,转载请注明出处:http://www ...
- java8新特性_乐字节-Java8新特性-接口默认方法
总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...
- java8新特性lambda表达式、函数式编程、方法引用和接口默认方法以及内部类访问外部变量
一提到java是一种什么语言? 大多数人肯定异口同声的说是一门面向对象的语言,这种观点从我们开始学java就已经根深蒂固了,但是学到java8新特性函数式编程的时候,我才知道java并不是纯面向对象的 ...
- idea重写接口没有@override_乐字节|Java8核心实战-接口默认方法
JAVA8已经发布很久,是自java5(2004年发布)之后Oracle发布的最重要的一个版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性,对于国内外互联网公司来说,Java8是以后技术 ...
- JAVA移慎_谨慎使用Java8的默认方法
为什么要谨慎使用Java8的默认方法?本文给出了为什么要慎用Java8默认方法的原因,解释的很详细,感兴趣的朋友可以参考一下 默认方法给JVM的指令集增加了一个非常不错的新特性.使用了默认方法之后,如 ...
- Java 8 - Interface Default Method接口默认方法
Java 8 相比于Java 7 推出了几大特色(features)(接口默认方法)default methods in interface, (接口静态方法)static method in int ...
- java接口的默认方法,实现类调用接口默认方法
概述 Java8带来了一些全新的特性,包括lambda表达式.函数接口.方法引用.流.可选方法.接口中的静态方法和默认方法. 在本文中,我们将深入讨论为什么java8接口新增了默认方法,如何使用默认方 ...
- JDK8新特性之接口默认方法与静态方法
接口默认方法与静态方法 有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题. 接口静态 ...
- jdk8 接口默认方法_JDK 8中方便的新地图默认方法
jdk8 接口默认方法 Map接口在JDK 8中提供了一些方便的新方法 . 因为我在本文中介绍的Map方法是作为默认方法实现的,所以Map接口的所有现有实现都享有在默认方法中定义的默认行为,而无需任何 ...
最新文章
- Linux那些事儿 之 戏说USB(24)设备的生命线(七)
- 简化 MongoDB 关联运算
- Caffe: Vs13添加CUDA支持
- vue error:The template root requires exactly one element.
- HttpRequest Get和Post调用其他页面的方法
- 在 Flutter 中创建一个动画屏幕
- Axure统计图表设计
- WARNING:tensorflow:sample_weight modes were coerced from ... to [‘...‘]
- 什么是侧翼区(flanking region)和侧翼区单核苷酸多态性(Flanking SNPs)
- iOS系统的设备怎么装两个微信?
- Idea在启动Debug功能时报错:Unable to open debugger port (127.0.0.1:63985):
- 【洛谷P4315】月下毛景树 树链剖分03
- java解析HL7协议报文工具 HAPI(SpringBoot版本)
- 【帝国CMS】灵动标签SQL调用广告系统里的广告
- IDEA封神榜大语言模型二郎神系列Erlangshen-Ubert-110M-Chinese使用
- Python与R的区别与联系
- 移民真的抢走了美国人的工作吗?
- 谷歌浏览器如何彻底关闭右下角弹出的广告弹窗
- 计算机学院迎新晚会目的,某学院计算机系迎新晚会策划书.doc
- 2021-08-17 WPF控件专题 Canvas 控件详解
热门文章
- Android中Context简介(通俗易懂)
- MariaDB/MySQL 报错解决:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
- oracle存过传参,oracle 存储过程 传参数,如果是希望传参值也被利用起来,存储过程里面虽有IN,但OUT必不可少。...
- java-高并发解决方案
- python aipspeech_Python调用百度API实现语音识别(二)
- 基于 python + WebDriverAgent 的“跳一跳”小程序高分教程
- LNMP架构之PHP——MemCache对PHP页面的缓存加速优化
- 保研软件学院和计算机学院,西南大学计算机与信息科学学院·软件学院(专业学位)计算机技术保研细则...
- linux lnmp yum,yum安装LNMP
- ubuntu12.04 mysql 安装_Ubuntu 12.04 安装 配置 访问MySQL