java8 接口默认方法好处_java8 新特性:接口默认方法和静态方法

JDK1.8开始,接口允许定义默认方法和静态方法。

1、默认方法

接口默认方法的语法很简单,即:

default关键字 methodName(参数列表) { // 实现体 }

接口静态方法语法与类的静态方法类似,不同的是接口静态方法的修饰符只能是public。

举个简单的例子,假如有一个Animal接口其中有fly()和swim()方法,有一个鸟类Bird和一个鱼类Fish同时实现这个接口,代码如下:

public interface Animal {

void fly();

void swim();

}

public class Bird implements Animal{

@Override

public void fly() {

}

@Override

public void swim() {

}

}

public class Fish implements Animal{

@Override

public void fly() {

}

@Override

public void swim() {

}

}

因为我们在Animal中定义了fly和swim方法,所以所有的类实现的时候必须覆盖这两个方法,但是鸟类不会swim,鱼类不会fly,但是又必须实现这些方法,导致了代码冗余。

因为我们可以利用jdk8 新特性:默认方法

public interface Animal {

default void fly() {

System.out.println("我会飞");

}

default void swim() {

System.out.println("我会游泳");

}

}

public class Bird implements Animal{

}

public class Fish implements Animal{

}

2、静态方法

假如有一个Animal工厂接口,该接口中有一个静态方法create()专门生产不同的Animal,在JDK1.8后由于引入了Lambda表达式,使子类不用覆写该接口的create()方法也可以生产任意的Animal,代码如下:

public interface AnimalFactory {

static Animal create(Supplier supplier){

return supplier.get();

}

}

public class Test {

public static void main(String[] args) {

// 工厂生产一只鸟

Animal bird = AnimalFactory.create(Bird::new);

bird.fly();

// 工厂生产一条鱼

Animal fish = AnimalFactory.create(Fish::new);

fish.swim();

}

}

3、接口静态方法的“类优先”原则

假如我们的实现类重写了接口的方法,那么类中的这个方法就会优先。

public class Fish implements Animal{

@Override

public void swim() {

System.out.println("我比其他鱼游的更快");

}

}

public class Test {

public static void main(String[] args) {

// 工厂生产一条鱼

Animal fish = AnimalFactory.create(Fish::new);

fish.swim();

}

}

我比其他鱼游的更快

标签:swim,静态方法,void,默认,public,接口,Animal,java8

来源: https://blog.csdn.net/weixin_38982591/article/details/104651460

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值