java8新特性-默认方法

简介: java8新特性-默认方法

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方法");
    
  }
 
  
 
}

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

2.默认方法的用途

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

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

弥补抽象类的不足

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

函数式接口提供便利

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

目录
相关文章
|
27天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
54 2
|
28天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
38 3
|
28天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
32 2
|
10天前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
24 4
|
12天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
52 4
|
22天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
43 17
|
16天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
32 2
|
24天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
19 3
|
26天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
24天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
16 2