接口的默认方法和静态方法

抽象父类的一个典型使用场景

抽象父类的一个经典的使用场景是为接口的实现类提供默认的实现,这样,接口的实现类就不用每一个都去实现一遍全套的接口所定义的方法。

默认方法

接口的默认方法的提出很大一部分目的就是为了顶替掉上述的抽象父类的这个经典使用场景。

在 JDK 8 中,default 关键字用在接口中,用来修饰非抽象的方法,称为『默认方法』 ( default method ) 。

public interface InterfaceA {
    default void testMethod(); // compile error! 会提示:Extension method should have a body.

    // 默认方法一
    default void print() {
        System.out.println("InterfaceA: an ordinary method.");
    }

    // 默认方法二
    default String getName() {
        return "InterfaceA";
    }
}
  • 首先,default 关键字用在接口中,用来修饰方法;

  • 其次,该方法不能使抽象方法,即必须是一个已经有了实现的方法,称为默认方法;

  • 最后,同一个接口内,可以有多个默认方法。

静态方法

在 Java 8 中,你可以为接口添加静态方法。 从技术的角度来说,这是完全合法的。只是它看起来违反了接口作为一个抽象对象的理念。

public interface InterfaceA {

    ...

    static void sayHello(String name) {
        System.out.println("InterfaceA: hello " + name);
    }

}
  • 特性 1:静态方法不可被重写 (即 @Override) ,会编译报错:Method does not override method from its superclass;

  • 特性 2:同一个实现类实现多个接口,允许这多个接口中声明同名的静态方法;

  • 特性 3:调用方式只有一种:接口名.静态方法,eg: InterfaceA.sayHello("susu");。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值