当前位置: 首页 > news >正文

【Java进阶学习 第五篇】JDK8、9中的接口新特性

接口新特性

可以提升代码的复用性,减少冗余

JDK8中接口的新特性主要可以允许调用默认方法和静态方法JDK9中接口的新特性为可以运行调用私有方法供本类方法使用

JDK8新特性

接口中可以定义有方法体的方法(默认或静态)

允许调用默认方法

作用是解决接口升级的问题

允许在接口中定义非抽象方法,但是需要使用关键字default修饰

public class JDK8 {
    public static void main(String[] args) {
        InterNet1 interNet1 = new InterNet1();
        InterNet2 interNet2 = new InterNet2();
        interNet1.method();
        interNet2.method();
    }
}
interface Inter{
    void show();
    void print();
    //升级接口
    public default void method(){
        System.out.println("Inter method...");
    }
}
class InterNet1 implements Inter{
    @Override
    public void show() {
        System.out.println("show111...");
    }

    @Override
    public void print() {
        System.out.println("print111...");
    }
}
class InterNet2 implements Inter{
    @Override
    public void show() {
        System.out.println("show222...");
    }

    @Override
    public void print() {
        System.out.println("print222");
    }
}

 比如这个代码是V2.0版本,使用JDK8的新特性就可以添加默认方法让子类调用,从而不需要修改实现类就可以升级接口。


实现类也可以重写接口的默认方法

package com.itheima.JdkNew;

public class JDK8 {
    public static void main(String[] args) {
        InterNet1 interNet1 = new InterNet1();
        InterNet2 interNet2 = new InterNet2();
        interNet1.method();
        interNet2.method();
    }
}
interface Inter{
    void show();
    void print();
    //升级接口
    public default void method(){
        System.out.println("Inter method...");
    }
}
class InterNet1 implements Inter{
    @Override
    public void method() {
        System.out.println("111 method...");
        //Inter.super.method();
    }

    @Override
    public void show() {
    }

    @Override
    public void print() {
    }
}
class InterNet2 implements Inter{
    @Override
    public void show() {
    }

    @Override
    public void print() {
    }
}

打印为:

111 method...
Inter method... 可以看见第一个实现类已经可以对接口中的默认方法进行重写


其中需要去掉default关键字,且如果要调用接口中的代码,需要用接口名.super

如果实现了多个接口,多个接口中存在相同的默认方法,实现类必须重写默认方法

public class JDK8 {
    public static void main(String[] args) {
        InterNet1 interNet1 = new InterNet1();
        interNet1.method();
    }
}
interface Inter{
    void show();
    void print();
    //升级接口
    public default void method(){
        System.out.println("Inter method...");
    }
}
interface A{
    public default void method(){
        System.out.println("A method...");
    }
}
class InterNet1 implements Inter,A{
    @Override
    public void method() {
        Inter.super.method();
        A.super.method();
    }

    @Override
    public void show() {
    }

    @Override
    public void print() {
    }
}

打印为:

Inter method...
A method... 可以看见在多实现接口的情况下,我们必须在子类重写同名的默认方法,且调用父类时,需要在super前声明接口。


允许调用静态方法

public class JDK8 {
    public static void main(String[] args) {
        A.function();
    }
}

interface A{
    default void method(){
        System.out.println("A method...");
    }
    static void function(){
        System.out.println("A function...");
    }
}

public可以省略,static不能省略,只能通过类名调用 


JDK9新特性

接口中可以定义私有方法

如果接口当中许多方法都需要同样的实现逻辑,可以编写私有方法方便操作

public class JDK8 {
    public static void main(String[] args) {
        InterNet2 obj = new InterNet2();
        obj.method();
        obj.function();
    }
}

interface A{
    default void method(){
        System.out.println("A method...");
        printLove();
//        System.out.println("love");
    }
    default void function(){
        System.out.println("A function...");
        printLove();
//        System.out.println("love");
    }
    private void printLove(){
        System.out.println("love");
    }
}

 如果接口的方法中有JDK8新特性提出的静态方法,那么我们可以在私有方法的基础上加上static修饰,这样既可以让默认方法使用,也可以让静态方法调用

public class JDK8 {
    public static void main(String[] args) {
        InterNet2 obj = new InterNet2();
        obj.method();
        A.function();
    }
}

interface A{
    default void method(){
        System.out.println("A method...");
        printLove();
//        System.out.println("love");
    }
    static void function(){
        System.out.println("A function...");
        printLove();
//        System.out.println("love");
    }
    private static void printLove(){
        System.out.println("love");
    }
}

相关文章:

  • ARM Cortex-M3 技术解析:核寄存器R1-R15介绍及使用
  • 第五章:工程化实践 - 第三节 - Tailwind CSS 大型项目最佳实践
  • kafka+spring cloud stream 发送接收消息
  • 华为OD机试真题-相对开音节-OD统一考试(E卷)
  • Meterpreter之getsystem命令提权原理详解
  • Zotero 快速参考文献导出(特定期刊引用)
  • 区块链相关方法-波士顿矩阵 (BCG Matrix)
  • Codes 开源免费研发项目管理平台 2025年第一个大版本3.0.0 版本发布及创新的轻IPD实现
  • 在LangFlow中集成OpenAI Compatible API类型的大语言模型
  • 不同类型的网站选择不同的服务器,那么应该怎么选择服务器呢?
  • STM32-心知天气项目
  • python包重要修改
  • 如何把windows机器作为SSH客户端免密登录
  • Markdown使用方法文字版解读
  • 数据表的存储过程和函数介绍
  • OpenBMC:BmcWeb app.run
  • tortoiseGit的使用和上传拉取
  • 使用docker开发镜像编译
  • pytest下allure
  • 医院安全(不良)事件上报系统源码,基于Laravel8开发,依托其优雅的语法与强大的扩展能力
  • 搜索引擎网站搭建/枫树seo
  • 沂源放心企业网站建设方案报价/软件推广的渠道是哪里找的
  • 凡科做的网站/优化的含义
  • 母版页做网站例子/电话百度
  • 涟水做网站/seo日常优化内容是什么
  • 亚马逊雨林是怎么形成的/多少关键词排名优化软件