java基础之java8新特性-默认方法

目录

1.默认方法

jdk8之前的接口

jdk8的接口

2.默认方法的用途

提供新的 API 版本而不破坏二进制兼容性

弥补抽象类的不足

为函数式接口提供便利


1.默认方法

jdk8之前的接口

在jdk8之前接口(interface)中可以定义变量和方法,变量必须是public,static,final的;方法必须是public,abstract的,由于这个修饰符是默认必须的,我们通常省略不写。

public interface MyInterfaceByJava7 {
    //public static final int MY_CONSTANT = 10;
    int MY_CONSTANT = 10;

    //public void add();
    void add();

}

jdk8的接口

jdk8开始支持使用static、default修饰的方法,可以写方法体,并且不需要子类重写。

public interface MyInterfaceByJava8 {
	
	int MY_CONSTANT = 10;

    void add();


	 public default void get() {
	     	// 默认实现
		 	System.out.println("默认get方法");
		 
	    }

	 public static void del() {
	    	// 静态方法实现
	    	System.out.println("静态del方法");
	    	
	    }

}

子类只需要重写抽象方法

public class MyInterfaceImpl implements MyInterfaceByJava8 {

	@Override
	public void add() {
		System.out.println("子类实现add方法");
		
	}

	

}

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

java基础之java8新特性-默认方法_第1张图片

2.默认方法的用途

提供新的 API 版本而不破坏二进制兼容性

当需要在一个接口中添加新的方法时,为了保证已存在的实现类仍然能够正常运行,通常需要对所有实现类进行修改。这会带来很大的工作量和风险。通过在接口中添加默认方法,可以在不破坏现有代码的情况下提供新的 API 版本。

弥补抽象类的不足

在 Java 中,抽象类是一种既可以包含抽象方法又可以包含具体方法的特殊类。但是,一个类只能继承一个抽象类,而可以实现多个接口。通过在接口中添加默认方法,可以弥补抽象类的不足,使得接口在一定程度上可以像抽象类一样提供通用的实现。

为函数式接口提供便利

Java 8 引入了函数式接口,即只包含一个抽象方法的接口。函数式接口可以被 lambda 表达式和方法引用所使用。通过在函数式接口中添加默认方法,可以提供一些通用的、默认的实现,使得函数式接口的使用更加便利。

你可能感兴趣的:(java基础,java,jdk)