JDK 8中,对接口的设计做了一项非常重要的变更:支持“默认方法”(Default Method),即可以在接口上声明和实现方法,这一点有点类似于抽象类、抽象方法,可以简化类的多个接口扩展的复杂度,潜在淡化JAVA有关多继承的缺陷,此外默认方法在lamda表达式使用方面非常便利。
此后,我们可能需要改变有些认知,比如“接口中不能有方法实现”等。
1、默认方法:在接口中可以声明修饰域为public default的方法实现体。
public interface Animal { public default void run() { System.out.println("Animal default run"); } } public interface Bird { public void fly(); public default void run() { System.out.println("Bird default run"); } public static void tweet(String voice) { System.out.println("Bird tweets:" + voice); } } public abstract class Poultry implements Bird,Animal { //抽闲类,可以直接改变默认方法的实现,覆盖所有接口的同名默认方法 public abstract void run(); public void bird() { Bird.super.run();//也可以调用接口的默认实现 Animal.super.run(); //可以通过接口直接使用其static方法 Bird.tweet("I am poultry!"); } }
如例所示,接口中,可以声明“default”默认方法实现,这与抽象类中的方法很像,默认方法可以被接口的实现者直接调用,也可以被继承它的子接口或者实现类重写,甚至实现接口的抽象类可以将default方法变更为抽象方法以便强制子类必须实现。
接口的实现类中,无论是否重写默认方法,都可以通过类似于“Bird.super.run()”的方式访问父接口的默认方法实现。同时,如果一个类,实现了多个接口,且这些接口中有重名的默认方法,仍然可以通过上述方式访问相应接口的默认方法。
由此可见,如果你在设计时发现,接口的子类具有某种共同的行为,你可以将其设计为“默认方法”,此后你则不需要设计抽象类来完成此要求,特别是此接口被多种不同的类实现时,可以避免在多个抽象类重复实现。
2、静态方法
在此前,static方法需要声明在类或者抽象类中,接口是不支持的,尽管接口中可以声明public static类型的属性。在接口中支持静态方法,跟“默认方法”一样,我们则不需要在像以前那样使用单独的类或者抽象类来完成此功能,在一定程度上简化了程序设计。
无论是默认方法,还是静态方法,其默认修饰域为public。
我们可以在lamba语法支持下,基于默认方法、方法引用等特性,更便捷的编写程序。
相关推荐
Java8默认方法和多继承Java开发Java经验技巧共8页.pdf.zip
开始---命令行--regedit ( 如果键值没有的时候,自己手动添加 ) 1.找到HKEY_CLASSES_ROOT\http\shell\open\command,双击"默认",将要用浏览器的可执行文件的完全路径输入到这里,例如...知道后我们使用java来操作注册表
java 设置默认按钮 java 设置默认按钮 java 设置默认按钮
Java使用默认浏览器打开指定URL的方法(二种方法).rar
java8之接口的默认方法和lambda表达式小结。 java8之接口的默认方法和lambda表达式小结。 java8之接口的默认方法和lambda表达式小结。
方法二: 代码如下://判断当前系统是否支持Java AWT Desktop扩展 if(java.awt.Desktop.isDesktopSupported()){ try{ //创建一个URI实例,注意不是URL java.net.URI uri=java.net.URI.create(“//www.j
Java中默认构造方法的举例说明及代码清单.pdf 学习资料 复习资料 教学资源
主要介绍了Java接口默认方法带来的问题,结合实例形式分析了java接口带来的二义性问题,需要的朋友可以参考下
主要介绍了Java中的默认方法,包括继承和调用等Java入门学习中的基础知识,需要的朋友可以参考下
主要介绍了Java8新特性之接口中的默认方法和静态方法的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
Java使用Swing默认皮肤控件代码示例,包含使用代码示例与截图。
Java面试经验
Java中文件选择器JFileChooser.showSaveDialog实现默认文件名的解决方案
主要介绍了Java Collections.sort()实现List排序的默认方法和自定义方法,需要的朋友可以参考下
Java8新特性之默认方法_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...
为什么要谨慎使用Java8的默认方法?本文给出了为什么要慎用Java8默认方法的原因,解释的很详细,感兴趣的朋友可以参考一下
java中public、protected、默认、private关键字
像这样的日志代码会更好: if (log.isLoggable(Level.FINE)) { ...假定你已经完成了分析,并且判断出是运行环境中Java 组件的性能需要改善。 ——参考资料:仅个人学习,未详尽测试,请自行调试!!
经常遇到路径问题 这些也是我从网上找到的 大家分享下