gdb 扩展 默认参数
如您所知,Java的新版本已于2014年3月18日发布,我将介绍一系列文章来演示其新功能,也许在某些方面,我将谈论我的想法和批评。
我认为重要的第一个功能是“默认方法”,在所有Java语言的先前版本中,接口只能包含方法定义(声明)而不是方法实现(方法体),但是在Java 8中,接口中增加了一个新功能,使您能够在接口中声明方法及其实现。
假设您可以使用以下新功能创建一个界面:
public interface Dog {void bark();default void bite() {System.out.println("Biting Biting Biting");}
}public class Husky implements Dog {@Overridepublic void bark() {System.out.println("barking");}public static void main(String... args){Dog dog = new Husky();dog.bite();dog.bark();}
}
这是完全自我解释的,您可以将行为添加到接口中,并且所有已实现的类都将这种行为作为方法的默认实现,因此不会被迫实现默认方法。
默认方法的原因
在之前的一篇文章中,我们对Open Close Principal进行了介绍,正如对此主体类的复习应该关闭并进行扩展一样。 我认为默认方法并不遵循该原则,但是有些地方也许我们没有任何解决方案来扩展我们的旧代码。
例如,在Java 8中,语言中增加了一个新功能,可以在集合上使用lambda,可以使用此方法的一种方法是调用Collection接口的stream方法,如果这只是一个方法声明,则说明实现了Collection的所有书面代码会休息的。
有时候,对于我来说,它需要扩展我的界面,但是由于许多其他客户端正在使用界面,我不得不寻找另一种解决方案,不幸的是,在大多数情况下,这是一种混乱的方式。
关于默认方法的几点
当您要使用默认方法或要使用使用默认方法的代码时,应了解一些要点。
- 扩展包含默认方法的接口:
当您想使用默认方法扩展或实现接口时,关于默认方法有三种选择。- 您可以使用它们的默认实现,而忽略以重新定义它们。
- 您可以重新声明它,因此它将是一种抽象方法。
- 您可以通过重新定义它来覆盖它。
- 使用默认方法的多重继承:使用默认方法,您可以拥有具有许多接口的mixin行为的类,但是您应该注意一个重要的点。
如果扩展接口具有公共方法签名,则您 将面临编译时错误 ,因为同一方法签名的两个实现之间存在歧义,在这种情况下,您将需要重写方法并通过自己的代码来实现或选择默认方法之一。
- 扩展包含默认方法的接口:
public interface FirstInterface {default void doSomething(){System.out.println("Doing something from FirstInterface");}}public interface SecondInterface {default void doSomething(){System.out.println("Doing something from SecondInterface");}
}public class FirstImplementation implements SecondInterface,FirstInterface {@Overridepublic void doSomething(){SecondInterface.super.doSomething();}public static void main(String... args){System.out.println("GGG");new FirstImplementation().doSomething();}
}
翻译自: https://www.javacodegeeks.com/2014/03/default-methods-an-approach-to-extend-legacy-code.html
gdb 扩展 默认参数