Java8新特性一:默认方法

2021-09-07  本文已影响0人  zztigyk

1. 默认方法

1.1 语法

  默认方法就是一个在接口里面有了可以实现的方法。在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的,这些修饰符都是默认的。public 抽象方法需要子类实现。在JDK 1.8开始 支持使用static和default 修饰 可以写方法体,不需要子类重写。

1.2 实例

public class Java8Tester {
    public static void main(String args[]) {
        Vehicle vehicle = new Car();
        vehicle.print();
    }
}
 
interface Vehicle {
     /**
     * 默认方法 可以写方法体
     */
    default void print() {
        System.out.println("我是一辆车!");
    }
    /**
     * 静态方法 可以写方法体
     */
    static void blowHorn() {
        System.out.println("按喇叭!!!");
    }
}
 
interface FourWheeler {
     /**
     * 默认方法 可以写方法体
     */
    default void print() {
        System.out.println("我是一辆四轮车!");
    }
}
 
class Car implements Vehicle, FourWheeler {
     /**
     * 默认和静态方法不是我们的抽象方法 ,所以不需要重写
     */
    public void print() {
        Vehicle.super.print();
        FourWheeler.super.print();
        Vehicle.blowHorn();
        System.out.println("我是一辆汽车!");
    }
}

执行以上脚本,输出结果为:

我是一辆车!
我是一辆四轮车!
按喇叭!!!
我是一辆汽车!

1.3 多个默认方法

一个接口有默认方法,考虑这样的情况,一个类实现了多个接口,且这些接口有相同的默认方法,以下实例说明了这种情况的解决方法
第一个解决方案是创建自己的默认方法,来覆盖重写接口的默认方法:

public class Car implements vehicle, fourWheeler {
    @Override
    public void print() {
        System.out.println("我是一辆四轮汽车!");
    }
}

第二种解决方案可以使用 super 来调用指定接口的默认方法:

public class Car implements vehicle, fourWheeler {
    @Override
    public void print() {
        vehicle.super.print();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读