接口问题新解:原来接口也可以有多个默认或静态方法!

一、碰到问题:

接口有多个默认或静态方法?不是要全部抽象才成为接口吗?

二、解答:

在Java 8之前的版本中,接口只能包含抽象方法,即那些没有具体实现的方法。然而,从Java 8开始,接口中引入了两种新的方法类型:默认方法(default methods)和静态方法(static methods)。

  1. 默认方法:默认方法是接口中带有默认实现的方法。这意味着实现接口的类可以选择使用默认实现,也可以覆盖这个方法提供自己的实现。这样做的一个优点是能够向现有接口添加新方法而不破坏现有的实现。
public interface MyInterface {
    default void defaultMethod() {
        System.out.println("This is a default method");
    }
}
  1. 静态方法:静态方法是属于接口本身,而不是接口的实例的方法。它们可以直接通过接口调用,而无需实现或实例化接口。
public interface MyInterface {
    static void staticMethod() {
        System.out.println("This is a static method");
    }
}

即使一个接口包含了默认方法或静态方法,它仍然是一个接口。而函数式接口的定义是仅有一个抽象方法的接口。这并不排除接口有其他类型的方法,如默认方法或静态方法。实际上,函数式接口可以包含任意数量的默认和静态方法,但必须只有一个抽象方法。这样,它们仍然可以配合lambda表达式使用。

例如,以下是一个有效的函数式接口:

@FunctionalInterface
public interface MyFunctionalInterface {
    void abstractMethod(); // 抽象方法

    default void defaultMethod() {
        // 默认方法的实现
    }

    static void staticMethod() {
        // 静态方法的实现
    }
}

在这个例子中,MyFunctionalInterface 只有一个抽象方法abstractMethod,因此它是一个有效的函数式接口,尽管它还包含了一个默认方法和一个静态方法。这个接口可以与lambda表达式一起使用,因为它满足函数式接口的要求。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值