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引入了默认方法(default methods),这使得接口能够拥有默认的实现,从而为已有的类库添加新功能而无需修改原有类的结构。这一设计虽然带来了便利,但也导致了与多继承相关的新挑战。 首先,让我们理解什么...
本文将深入探讨Java中的默认构造方法,并通过一个具体的例子来展示其工作原理。 默认构造方法的特点是它没有参数,且不执行任何特定的操作。它的主要作用是确保在没有自定义构造方法的情况下,类的实例仍然可以被...
开始---命令行--regedit ( 如果键值没有的时候,自己手动添加 ) 1.找到HKEY_CLASSES_ROOT\http\shell\open\command,双击"默认",将要用浏览器的可执行文件的完全路径输入到这里,例如...知道后我们使用java来操作注册表
下面我们将详细探讨如何在Java中设置默认按钮。 首先,我们需要导入相关的Java Swing库: ```java import javax.swing.*; ``` `JFrame`是Java Swing中的顶级容器,用于创建窗口。`JButton`则用来创建按钮。要设置...
Java接口默认方法是一个强大的功能,它允许开发者在接口中添加默认实现,从而使得接口更加灵活和实用。然而, Java接口默认方法也带来了一个问题,那就是二义性问题。 什么是二义性问题?在Java 8中,如果一个类...
在Java编程中,有时我们需要实现一个功能,即通过程序控制打开用户的默认浏览器并访问特定的URL。本资源“Java使用默认浏览器打开指定URL的方法(二种方法).rar”提供了两种实现这一目标的方法。下面将详细阐述这两...
Java8新特性之接口中的默认方法和静态方法 Java8中引入了接口中的默认方法和静态方法,极大地增强了接口的灵活性和实用性。本文将详细介绍接口中的默认方法和静态方法的相关知识点。 接口中的默认方法 在Java8...
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中的默认方法(Default Method)是Java 8引入的一个重要特性,主要目的是为了在不破坏向后兼容性的情况下,向已有的接口添加新的方法。这一特性使得接口不仅可以定义抽象方法,还可以提供默认的实现,即默认方法...
Java 默认方法是Java 8引入的一个重要特性,它允许在接口中定义方法的实现,而不会破坏现有的实现。默认方法通过使用`default`关键字来标识,这样接口的实现类可以选择覆盖该方法或直接使用默认实现。 在Java 8中,...
"Java中文件选择器JFileChooser.showSaveDialog实现默认文件名的解决方案" 在 Java 中,文件选择器 JFileChooser 是一个常用的组件,用于选择打开文件或保存文件。然而,在使用 JFileChooser 的时候,我们经常会...
- **一次转码**:使用`encodeURI()` 对URL进行编码,然后在服务器端使用适当的解码方法,如Java中的`new String(name.getBytes("ISO-8859-1"), "UTF-8")`,确保从ISO-8859-1转回UTF-8。 - **二次转码**:先使用`...
这种效果可以通过一些技巧来实现,而标题和描述中提到的方法就是通过在文本框上方添加一个不可点击的`JLabel`来模拟这种占位符效果。 首先,我们需要理解`JTextField`和`JPasswordField`的基本用法。`JTextField`是...
通过这种方式,可以有效地解决多继承中方法冲突的问题。 #### 三、案例分析 让我们来看一个具体的例子来更好地理解这一点。假设有一个接口`A`和另一个接口`B`,这两个接口都有一个名为`say`的默认方法,但实现不同...
默认方法在Java8中扮演了重要角色,特别是在集合框架的改进中。它们允许在不破坏既有代码的情况下扩展接口,为引入lambda表达式提供了平滑的过渡。随着Java8及更高版本的使用,预计默认方法将在API设计中得到更多...
总结来说,通过Java 8的Lambda表达式和默认方法,我们可以更优雅地实现模板方法模式。这种实现方式不仅简化了代码,还保持了良好的可扩展性和灵活性,使得不同的工作流实现能够轻松地定制其特定任务。同时,Lambda...
- 在接口中,Java 8 允许定义带有实现的方法,称为默认方法。这使得可以在不破坏现有实现的情况下向接口添加新方法,如 `Collection` 接口中的 `forEach` 方法。 3. **日期与时间 API**: - Java 8 改进了日期和...
通过上述方法,可以有效解决Java在处理中文字符时可能出现的乱码问题,确保程序在各种环境下正确显示中文。在开发过程中,保持编码一致性,理解和利用Java提供的字符编码工具,是预防和解决这类问题的关键。