Java8接口的默认方法
来源:互联网 发布:传销金字塔算法 编辑:程序博客网 时间:2024/05/19 15:41
原文:http://www.jb51.net/article/78516.htm
Java8接口的默认方法
什么是默认方法,为什么要有默认方法?
简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。
为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的 java 8之前的集合框架没有foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了使接口没有引入与现有的实现不兼容发展。
如以下所示,
声明了一个接口,里面只有一个默认方法。然后写一个具体的类实现这个接口,
public class Dog implements Animal { public void sayHi() { System.out.println("dog"); } public static void main(String args[]) { Dog dog = new Dog(); dog.eat(); }}
再具体的类里面不是必须重写默认方法,但必须要实现抽象方法。
默认方法的多重继承
如下所示代码,
打印结果:
obj.hello()调用的是B接口中的默认方法。同时在B接口中的默认方法有调用了父接口中的默认方法。
我们再来看一个例子,思考一下在多重继承中,如果出现了同名的默认方法,如下所示,
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 { @Override public 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();
另一个java8的接口默认方法实例:
java8新增了接口的默认方法, 也就是说在接口中也可以有实现了, 这个实现方法是默认的实现,你也可以在接口的实现类里对此默认方法进行重写。
如下实例:
public class AppInterfaceDefaultMethod { public static interface DefaultMethodDemo { //定义默认方法, 默认方法前面加default关键字, 后面跟方法声明和方法体 default void demo(String input) { System.out.println(input); } void doSomething(); } public static class DemoClass implements DefaultMethodDemo { @Override public void doSomething() { System.out.println("do something"); } } public static class DemoClassOverrideDemo implements DefaultMethodDemo { //重写了默认方法 @Override public void demo(String input) { System.out.println("demo " + input + " by override method"); } @Override public void doSomething() { System.out.println("do something"); } } public static void main(String[] args) { DefaultMethodDemo demo = new DemoClass(); demo.demo("abc"); DefaultMethodDemo demoOverride = new DemoClassOverrideDemo(); demoOverride.demo("abc"); }}
以上就是关于Java8接口的默认方法详细介绍,希望对大家的学习有所帮助。
阅读全文
0 0
- Java8 接口的默认方法
- Java8接口的默认方法
- java8接口默认方法
- Java8 接口默认方法
- java8之接口的默认静态方法
- 浅谈JAVA8引入的接口默认方法
- Java8中接口的默认方法
- java8接口默认方法二
- Java8特性之接口的默认方法与静态方法
- java8新特性接口的默认方法和静态方法
- java8新特性接口的默认方法和静态方法
- Java8---2.函数接口的默认方法和静态方法
- 二、Java8的默认方法和静态接口方法
- java8 接口的默认方法和静态方法
- JAVA8新特性(接口的默认方法)
- JAVA8新特性(访问接口的默认方法)
- 找回过去之java8旧特性的接口默认方法
- 关于java8接口中默认方法的使用
- A
- 框架串讲
- hdu 1077 圆覆盖的最大点数
- 机智云受邀参加2017中国ISV生态系统峰会
- java类初始化顺序
- Java8接口的默认方法
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- MD5加密算法源码
- 周志华机器学习 西瓜书(PDF) 斯坦福大学机器学习视频 机器学习基石+技法 邹博机器学习 七月在线机器学习 资源下载
- Python cv2灰度图转伪彩图
- hdu 1004 Let the Balloon Rise
- 关于ggplot2的一些用法
- B
- HTML基础篇