默认方法一种扩展旧代码的方法

如您所知,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 {
    @Override
    public void bark() {
        System.out.println("barking");
    }
 
    public static void main(String... args){
        Dog dog = new Husky();
        dog.bite();
        dog.bark();
    }
}

这是完全自我解释的,您可以将行为添加到接口中,并且所有已实现的类都将这种行为作为方法的默认实现,因此不会被迫实现默认方法。

默认方法的原因

之前的一篇文章中,我们对Open Close Principal进行了介绍,就像在这个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 {
 
    @Override
    public 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值